// カメラデバイスからの入力を作成し、セッションに追加する
NSError *error = nil;
_camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([_camera lockForConfiguration:&error]) {
[_camera setFocusMode:AVCaptureFocusModeContinuousAutoFocus];
_camera.autoFocusRangeRestriction = AVCaptureAutoFocusRangeRestrictionNear;
if ([_camera isExposureModeSupported:AVCaptureExposureModeAutoExpose]){
[_camera setExposureMode:AVCaptureExposureModeAutoExpose];
}
[_camera unlockForConfiguration];
}
[_camera addObserver:self forKeyPath:@"adjustingFocus" options:NSKeyValueObservingOptionNew context:nil];
// 画面遷移時など不要になったらremoveしないと再度addしたときに落ちる
// [_camera removeObserver:self forKeyPath:@"adjustingFocus"];
/**
- 状態が変化したときに呼ばれるのはこちら
*/
-
(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
// ピントの状態が変化する度にこのコードが呼ばれます。
// ここに実装を書く事でピント合った/外れたタイミングで枠の表示/非表示が出来ます。
if( [keyPath isEqualToString:@"adjustingFocus"] ){
BOOL adjustingFocus = [[change objectForKey:NSKeyValueChangeNewKey] isEqualToNumber:[NSNumber numberWithInt:1] ];if (adjustingFocus) { _focusing=true; _finishedFocus = false; NSLog(@"focusing"); } else { if (_focusing) { _focusing = false; _finishedFocus = true; NSLog(@"finishFocus"); } }
}
}