iOS 闪光灯

iOS闪关灯的Demo其实并没有想象中的那么简单: 找到闪光灯相关的类, 它肯定有开关对应的方法, 然后直接调用就行了. 事实证明这种想法太想当然了. 

iOS系统中, 并没有专门的类来负责闪光灯的工作, 闪关灯其实是和摄像头一起工作的, 也就是在拍照和摄像过程中一起搭档的. 所以在寻找类的时候, 就要在AVMediaTypeVideo中寻找:

            for (AVCaptureDevice *device in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
                if ([device hasFlash] &&
                    [device isTorchModeSupported:(AVCaptureTorchModeOn)] &&
                    [device isTorchModeSupported:(AVCaptureTorchModeOff)]) {
                    _device = device;
                    break;
                }
            }
和拍照同理, 在和硬件打交道的时候, 必须先询问它在不在可不可用. 只有在存在并且获取使用权限的时候, 你才可以控制它:

    NSString *mediaType = AVMediaTypeVideo;
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
    if (authStatus != AVAuthorizationStatusRestricted &&
        authStatus != AVAuthorizationStatusDenied) {
            NSError *error = nil;
            if ([_device lockForConfiguration:&error]) {
                if (enabled) {
                    [_device setTorchMode:(AVCaptureTorchModeOn)];
                } else {
                    [_device setTorchMode:(AVCaptureTorchModeOff)];
                }
                [_device unlockForConfiguration];
            } else {
                NSLog(@"Failed to lock device %@ for configuration: %@", _device, error);
            }
    }
在此我封装了一个手电筒的类 MHTorch:工程需导入:AVFoundation.framework

//
//  MHTorch.h
//   
//
//  Created by MacroHong on 9/6/15.
//  Copyright © 2015 MacroHong. All rights reserved.
//

#import <Foundation/Foundation.h>

/*!
 *  @author Macro QQ:778165728, 15-09-06
 *
 *  @brief  手电筒类
 */
@interface MHTorch : NSObject
/*!
 *  @author Macro QQ:778165728, 15-09-06
 *
 *  @brief  打开手电筒
 */
- (void)turnTorchOn;
/*!
 *  @author Macro QQ:778165728, 15-09-06
 *
 *  @brief  关闭手电筒
 */
- (void)turnTorchOff;

@end

这个类直接提供了和手电筒相关的开和关的两个接口, 调用的时候也非常方便:

// 初始化一个手电筒对象(最原始的alloc,init初始化方法)
MHTorch *torch = [[MHTorch alloc] init];
// 打开手电筒
[torch turnTorchOn];
// 关闭手电筒
[torch turnTorchOff];

在这两接口的实现过程, 都是在新开辟的线程中进行的, 这样就相当于在后台进行手电筒的操作, 你UI的操作就可以照常进行

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值