iOS前后摄像头的切换方法

作者: JackRen | 来源:发表于2017-03-15 20:23 被阅读1327次

pragma mark - 摄像头和相册相关的公共类

// 判断设备是否有摄像头

  • (BOOL) isCameraAvailable{

return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

}

// 前面的摄像头是否可用

  • (BOOL) isFrontCameraAvailable{

return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];

}

// 后面的摄像头是否可用

  • (BOOL) isRearCameraAvailable{

return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];

}

  • (BOOL) hasMultipleCameras {

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

if (devices != nil && [devices count] > 1) return YES;

return NO;

}

  • (AVCaptureDevice *)cameraWithPosition : (AVCaptureDevicePosition) position

{

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

for (AVCaptureDevice *device in devices )

if ( device.position == position )

return device;
return nil ;

}

  • (void) swapFrontAndBackCameras {

//check for available cameras!

if (![self hasMultipleCameras]) return;
//assumes session is running

NSArray *inputs = self.captureSession.inputs; //should only be one value!

for ( AVCaptureDeviceInput *captureDeviceInput in inputs ) {

AVCaptureDevice *device = captureDeviceInput.device ;

if ( [device hasMediaType:AVMediaTypeVideo ] ) {

AVCaptureDevicePosition position = device.position ;

AVCaptureDevice *newCamera = nil ;

AVCaptureDeviceInput *newInput = nil ;
if (position == AVCaptureDevicePositionFront)

newCamera = [self cameraWithPosition:AVCaptureDevicePositionBack];

else

newCamera = [self cameraWithPosition:AVCaptureDevicePositionFront];
[self initializeCaptureDevice:newCamera];

newInput = [AVCaptureDeviceInput deviceInputWithDevice:newCamera error:nil];
// beginConfiguration ensures that pending changes are not applied immediately

[self.captureSession beginConfiguration ];
[self.captureSession removeInput:captureDeviceInput]; //remove current

[self.captureSession addInput:newInput]; //add new
// Changes take effect once the outermost commitConfiguration is invoked.

[self.captureSession commitConfiguration];

break ;

}

}

}

相关文章

网友评论

本文标题:iOS前后摄像头的切换方法

本文链接:https://www.haomeiwen.com/subject/mzjrnttx.html