2012-02-01 21 views
16

मैं जानना चाहता हूं कि आईफोन एप्लिकेशन के अंदर ऑटोफोकस के बारे में अधिसूचना प्राप्त करना संभव है या नहीं?आईफोन: कैमरा ऑटोफोकस पर्यवेक्षक?

आईई, क्या ऑटोफोकस शुरू होने पर समाप्त होने पर यह अधिसूचित होने का एक तरीका मौजूद है, समाप्त होता है, अगर यह सफल होता है या विफल रहता है ...?

यदि हां, तो यह अधिसूचना नाम क्या है?

उत्तर

42

मुझे ऑटोफोकस प्रारंभ होने/समाप्त होने पर मेरे मामले का समाधान मिल जाता है। यह बस केवीओ (कुंजी-मूल्य निरीक्षण) से निपट रहा है।

मेरी UIViewController में:

// callback 
- (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] ]; 
     NSLog(@"Is adjusting focus? %@", adjustingFocus ? @"YES" : @"NO"); 
     NSLog(@"Change dictionary: %@", change); 
    } 
} 

// register observer 
- (void)viewWillAppear:(BOOL)animated{ 
    AVCaptureDevice *camDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    int flags = NSKeyValueObservingOptionNew; 
    [camDevice addObserver:self forKeyPath:@"adjustingFocus" options:flags context:nil]; 

    (...) 
} 

// unregister observer 
- (void)viewWillDisappear:(BOOL)animated{ 
    AVCaptureDevice *camDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    [camDevice removeObserver:self forKeyPath:@"adjustingFocus"]; 

    (...) 
} 

प्रलेखन:

+0

यह आपको हालांकि नहीं बताता है कि क्या ऑटोफोकस विफल रहा है,। यहां तक ​​कि अगर समायोजन फोकस गलत हो जाता है, तो इसका मतलब यह नहीं है कि कैमरा फोकस में है। –

+1

यह विधि आईफोन 6/6 प्लस/6 एस/6 एस प्लस क्लास डिवाइस पर भी विफल हो जाती है, क्योंकि एक अलग ऑटोफोकस मोड है जहां एडजस्टिंग फोकस सटीक नहीं है। –

+0

आईएसओ की कुंजी के लिए मूल्य क्या है? इस उपयोगी जानकारी के लिए – Nil

1

स्विफ्ट 3

सेट फोकस अपने AVCaptureDevice उदाहरण पर मोड:

do { 
    try videoCaptureDevice.lockForConfiguration() 
    videoCaptureDevice.focusMode = .continuousAutoFocus 
    videoCaptureDevice.unlockForConfiguration() 
} catch {} 

पर्यवेक्षक जोड़ें:

videoCaptureDevice.addObserver(self, forKeyPath: "adjustingFocus", options: [.new], context: nil) 

अवहेलना observeValue:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 

    guard let key = keyPath, let changes = change else { 
     return 
    } 

    if key == "adjustingFocus" { 

     let newValue = changes[.newKey] 
     print("adjustingFocus \(newValue)") 
    } 
} 
संबंधित मुद्दे