iOS前后摄像头的切换方法

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 ;

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容