Próbuję utworzyć aplikację aparatu fotograficznego, która będzie działać mniej więcej tak samo jak domyślna aplikacja aparatu. Rzecz, która w tej chwili nie działa dla mnie, to dotknij, aby się skupić. Chcę, aby kamera skupiała się i robiła wszystko, co robi na moim dotkniętym punkcie, tak jak robi to prawdziwa aplikacja aparatu.ios AVFoundation stuknij, aby ustawić ostrość
Oto mój viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
// Session
_session = [[AVCaptureSession alloc] init];
_session.sessionPreset = AVCaptureSessionPresetPhoto;
// Input
_videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
_videoInput = [AVCaptureDeviceInput deviceInputWithDevice:_videoDevice error:nil];
// Output
_frameOutput = [[AVCaptureVideoDataOutput alloc] init];
_frameOutput.videoSettings = [NSDictionary dictionaryWithObject:AVVideoCodecJPEG forKey:AVVideoCodecKey];
[_frameOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
[_session addInput:_videoInput];
[_session addOutput:_frameOutput];
[_session startRunning];
};
A oto metoda, która powinna uczynić mój aparat ostrości rzeczy na kliknięcia.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[touches enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
UITouch *touch = obj;
CGPoint touchPoint = [touch locationInView:touch.view];
focusLayer.frame = CGRectMake((touchPoint.x-25), (touchPoint.y-25), 50, 50);
if ([_videoDevice isFocusPointOfInterestSupported]) {
NSError *error;
if ([_videoDevice lockForConfiguration:&error]) {
[_videoDevice setFocusPointOfInterest:touchPoint];
[_videoDevice setExposurePointOfInterest:touchPoint];
[_videoDevice setFocusMode:AVCaptureFocusModeAutoFocus];
if ([_videoDevice isExposureModeSupported:AVCaptureExposureModeAutoExpose]){
[_videoDevice setExposureMode:AVCaptureExposureModeAutoExpose];
}
[_videoDevice unlockForConfiguration];
}
}
// NSLog(@"x = %f, y = %f", touchPoint.x, touchPoint.y);
}];
}
Nic tak naprawdę nie dzieje się po kliknięciu na ekranie.
Czy istnieje dokumentacja lub coś, co wyjaśnia, dlaczego należy to zrobić w ten sposób? – spacecash21
Zaktualizowano odpowiedź, aby wskazać dokumentację dostarczoną przez Apple. –
Można również użyć metody "AVCaptureVideoPreviewLayer" i metody "captureDevicePointOfInterestForPoint" do obliczenia punktu ostrości. – Legoless