2013/10/26

[iOS][Objective-C]フロントカメラとリアカメラを切り替える

iOSでよく見られるボタンを押して、リアカメラとフロントカメラを切り替える処理は、下のように書けばおk

/*--------------------------------------------------
AVCaptureSession *session;
AVCaptureDeviceInput *frontFacingCameraDeviceInput;
AVCaptureDeviceInput *backFacingCameraDeviceInput;
----------------------------------------------------*/
-(void)changeDevice{


    [session beginConfiguration];
    //初回設定
    if([session.inputs count] == 0){
        [session addInput:backFacingCameraDeviceInput];
    //2回目以降
    }else{

        AVCaptureDeviceInput *deviceInput = (AVCaptureDeviceInput *)[session.inputs objectAtIndex:0];
        AVCaptureDevice *device = deviceInput.device;
        AVCaptureDeviceInput *nextDeviceInput;
        if (device.position == AVCaptureDevicePositionBack) {
            nextDeviceInput = frontFacingCameraDeviceInput;
        }else{
            nextDeviceInput = backFacingCameraDeviceInput;
        }
        [session removeInput:deviceInput];
        [session addInput:nextDeviceInput];

    }
    [session commitConfiguration];
}

-(void)setCameraDeviceInput{
    NSArray *devices = [AVCaptureDevice devices];
    for (AVCaptureDevice *device in devices) {
        if ([device hasMediaType:AVMediaTypeVideo]) {
            NSError *error = nil;
            if (device.position == AVCaptureDevicePositionBack) {
                backFacingCameraDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
            }else{
                frontFacingCameraDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
            }
        }
    }
}
setCameraDeviceInputメソッドでAVCaptureDeviceInputクラスのfrontFacingCameraDeviceInput変数とbackFacingCameraDeviceInput変数を初期化して、実際の、切り替えは、changeDeviceメソッドが担当しています。

こうしてまとめておけば、次回以降、コピペで済むので便利かなと。

0 コメント:

コメントを投稿