ios开发拍照功能之设备前后摄像头切换

#import <AVFoundation/AVFoundation.h>

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

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

- (BOOL) isCameraAvailable{

    return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

}


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

- (BOOL) isFrontCameraAvailable{

    return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];

}


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

- (BOOL) isRearCameraAvailable{

    return [UIImagePickerController isCameraDeviceAvailable: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 ;

        }

    }

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值