Objective-c全栈工程师之成长之路

iOS前后摄像头的切换方法

2017-03-15  本文已影响1327人  JackRen

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

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

return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

}

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

return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];

}

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

return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];

}

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

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

return NO;

}

{

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

for (AVCaptureDevice *device in devices )

if ( device.position == position )

return device;
return nil ;

}

//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 ;

}

}

}

上一篇 下一篇

猜你喜欢

热点阅读