【问题标题】:How to turn the iPhone camera flash on/off?如何打开/关闭 iPhone 相机闪光灯?
【发布时间】:2011-08-18 11:27:16
【问题描述】:

如何以编程方式打开/关闭 iPhone 的 LED 摄像头闪光灯?

【问题讨论】:

  • 别忘了添加 AVFoundation.framework...

标签: ios objective-c iphone ios-camera


【解决方案1】:
#import <AVFoundation/AVFoundation.h>

...

- (void) turnTorchOn: (bool) on {

    // check if flashlight available
    Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
    if (captureDeviceClass != nil) {
        AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        if ([device hasTorch] && [device hasFlash]){

            [device lockForConfiguration:nil];
            if (on) {
                [device setTorchMode:AVCaptureTorchModeOn];
                [device setFlashMode:AVCaptureFlashModeOn];
                //torchIsOn = YES; //define as a variable/property if you need to know status 
            } else {
                [device setTorchMode:AVCaptureTorchModeOff];
                [device setFlashMode:AVCaptureFlashModeOff];
                //torchIsOn = NO;            
            }
            [device unlockForConfiguration];
        }
    } }

【讨论】:

  • 你在哪里声明torchIsOn?
  • @YassineHoussni 您可以将其定义为类名中的 iVar 或如果您需要 getter 和 setter 的属性
  • @Odelya 是的,我已经找到了解决方案,我已将其定义为属性,不过谢谢!
  • 您可以将 iVar 替换为 device.torchActive。
  • 我更好的检查类的方法是: if ([AVCaptureDevice class]) { ... } // 如果你可以 SDK 有一个类但你不确定这个类是否存在在设备上。
【解决方案2】:

我将计时器与上面的代码结合起来。它对我有用...

 - (void)viewDidLoad
        {
         [super viewDidLoad];

         myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self                    selector:@selector(toggleFlashlight) userInfo:nil repeats:YES];
        // Do any additional setup after loading the view from its nib.
        }
       - (void) toggleFlashlight
       {

    // check if flashlight available
    Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
    if (captureDeviceClass != nil) {
        AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        if ([device hasTorch] && [device hasFlash]){

            [device lockForConfiguration:nil];
            if (device.torchMode == AVCaptureTorchModeOff) 
            {
                [device setTorchMode:AVCaptureTorchModeOn];
                [device setFlashMode:AVCaptureFlashModeOn];
                //torchIsOn = YES;
            }
            else 
            {
                [device setTorchMode:AVCaptureTorchModeOff];
                [device setFlashMode:AVCaptureFlashModeOff];
               // torchIsOn = NO;            
            }
            [device unlockForConfiguration];
        }
    } }

【讨论】:

  • 更容易将其放入 viewDidAppear。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多