【问题标题】:iPhone flashlight app crashes when button is tapped fast快速点击按钮时 iPhone 手电筒应用程序崩溃
【发布时间】:2011-01-21 04:50:51
【问题描述】:

我的手电筒应用程序运行良好。出于某种原因,每次我非常快地点击手电筒按钮时,应用程序都会冻结并且不执行任何操作。当我调用 AVCaptureSession stopRunning 时,它似乎冻结了。这是我的切换手电筒方法的代码。我还希望最终调用此方法以实现频闪功能。

- (void)toggleFlashlight{

  if (isTorchOn) {

   // Start session configuration
   [session beginConfiguration];

   [device lockForConfiguration:nil];    
   // Set torch to on
   [device setTorchMode:AVCaptureTorchModeOn];

   [device unlockForConfiguration];
   [session commitConfiguration];

  [session startRunning];


 }
 else {
  [session stopRunning];
  [session release]; 
  session = nil;

  session = [[AVCaptureSession alloc] init];

  // Create device input and add to current session
  AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
  [session addInput:input];

  // Create video output and add to current session      
  AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
  [session addOutput:output];
  [output release];
 }
}

【问题讨论】:

    标签: iphone avcapturesession avcapturedevice flashlight


    【解决方案1】:

    你真的了解上面粘贴的代码是做什么的,还是从其他地方复制的?

    因为您正在做的是反复要求 iOS 创建一个视频捕获会话,然后打开灯。创建视频捕获会话非常占用 CPU/内存。它从未被设计或打算快速使用 - 没有“正常”用例,用户会尝试在几秒钟内启动多个视频捕获会话。这就是您遇到崩溃的原因。

    【讨论】:

      【解决方案2】:

      这是一个较短的版本,您现在可以使用它来打开或关闭 LED:

      - (void)torchOnOff: (BOOL) onOff
      {
          AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
          if ([device hasTorch]) {
              [device lockForConfiguration:nil];
              [device setTorchMode: onOff ? AVCaptureTorchModeOn : AVCaptureTorchModeOff];
              [device unlockForConfiguration];
          }
      }
      

      【讨论】:

        【解决方案3】:

        如果您的应用围绕 AVCaptureSession 运行,您应该在应用的整个生命周期内运行一个 AVCapture 会话实例,并在该会话中简单地切换火炬。你把事情复杂化了。 如前所述,不要继续重新创建相同的会话。这是对资源的浪费。我建议观看有关该主题的 WWDC '10 视频并浏览演示项目。

        【讨论】:

          猜你喜欢
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多