zai*_*aid 0 iphone avcapturesession avcapturedevice flashlight
我的flashligh应用程序完美运行.出于某种原因,每次我快速点击手电筒按钮,应用程序只是冻结,并没有做任何事情.当我调用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];
}
}
Run Code Online (Sandbox Code Playgroud)
你真的明白你上面粘贴的代码是什么,或者你是否从其他地方复制过它?
因为你正在做的是反复要求iOS创建一个视频捕获会话,然后打开灯.创建视频捕获会话非常占用CPU /内存.它从未被设计或打算用于快速使用 - 没有"正常"用例,用户将在几秒钟内尝试启动多个视频捕获会话.这就是你遇到崩溃的原因.
这是一个较短的版本,您现在可以用来打开或关闭LED:
- (void)torchOnOff: (BOOL) onOff
{
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch]) {
[device lockForConfiguration:nil];
[device setTorchMode: onOff ? AVCaptureTorchModeOn : AVCaptureTorchModeOff];
[device unlockForConfiguration];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |