2012-05-20 4 views
27

से पहले कैमरे के लिए तैयार है जब [camera takePicture] कहा जाता है, यह इस संदेश को बाहर थूक?कैसे पता चलेगा कि आईफोन कैमरा तस्वीर लेने के लिए तैयार है या नहीं?</p> <p><code>UIImagePickerController: ignoring request to take picture; camera is not yet ready.</code></p> <p>मुझे कैसे पता कर सकते हैं जब यह एक तस्वीर लेने के लिए तैयार है:

[camera isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] हमेशा सत्य लौटाता है, भले ही यह स्पष्ट रूप से तैयार न हो।

+0

http://stackoverflow.com/questions/6817920/recored-video-using-uiimagepickercontroller में इसी प्रकार के प्रश्न - चयनित उत्तर गलत है, लेकिन वहाँ एक और जवाब है जो देरी जोड़ने के बारे में बात करता है। यह शायद एक अच्छा प्रारंभिक बिंदु है। – Tass

+0

इसके अलावा, http://stackoverflow.com/questions/4377303/uiimagepickercontroller-camera-not-ready - ऐसा लगता है कि कैमरा तैयार नहीं होने पर एक रिटर्न कोड है। परिणाम जांचें, प्रतीक्षा करें, और पुनः प्रयास करें। – Tass

+0

मुझे यकीन है कि देरी एकमात्र रास्ता नहीं है, हालांकि ऐसा लगता है। निश्चित रूप से एक बेहतर समाधान है ... –

उत्तर

46

रूप @djromero ने कहा कि AVFoundation का उपयोग करके एक समाधान है (लेकिन नहींबजाय UIImagePickerController की। तुम बस AVFoundation का उपयोग एक अधिसूचना वापस पाने के लिए)। UIImagePickerController प्रस्तुति के बाद takePicture बुला (मैं कहाँ मिल गया संदेश 'कैमरा तैयार नहीं है' द्वारा

- (void)cameraIsReady:(NSNotification *)notification 
{ 
    NSLog(@"Camera is ready..."); 
    // Whatever 
} 

मैं सिर्फ यह परीक्षण किया है:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(cameraIsReady:) 
              name:AVCaptureSessionDidStartRunningNotification object:nil]; 

और फिर, एक बार कैमरा तैयार है तो आप अपनी सूचना मिल गया) और मेरे अधिसूचना कॉलबैक के अंदर, जहां यह एक आकर्षण की तरह काम करता था।

साइड-टिप्पणी:

[camera isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] हमेशा Yes देता है क्योंकि यह केवल जांच करता है कि वहाँ एक कैमरा उपकरण उपलब्ध है। वास्तव में, ऐप्पल अनुशंसा करता है कि आपको हमेशा यह जांचना होगा कि यह Yes लौटाता है और नियंत्रक को प्रारंभ करने और प्रस्तुत करने का प्रयास करने से पहले आपके पास एक गैर-शून्य प्रतिनिधि (dismiss मानक इंटरफ़ेस के माध्यम से पिकर प्रदान करने के लिए) प्रदान करने के लिए)।

+0

बहुत बढ़िया जवाब। यह अविश्वसनीय रूप से उपयोगी है। इसे अभी तक प्लग करने का मौका नहीं मिला है, लेकिन मैं उन उपरोक्तताओं से मान रहा हूं जो यह काम करता है। धन्यवाद अलादीनी !!! –

+0

@ जेम्सस्किडमोर आपका स्वागत है! दरअसल, यह इतना उपयोगी है कि ऐप्पल को इसे 'UIImagePickerController' के अंदर बेहतर तरीके से दस्तावेज करना चाहिए या कम से कम एक उच्च स्तरीय एपीआई (उदाहरण के लिए एक प्रतिनिधि विधि के माध्यम से) प्रदान करना चाहिए था। – Alladinian

+0

यह आईओएस 4.2.1 में काम नहीं कर रहा है। कोई त्रुटि नहीं, यह सिर्फ कॉलबैक विधि कभी निष्पादित नहीं होती है। कोई विचार? –

1

ईमानदार होने के लिए मैंने कोशिश नहीं की है और दस्तावेज़ीकरण कुछ हद तक संदिग्ध है, लेकिन [UIImagePickerController isCameraDeviceAvailable:...] के बारे में क्या है?

संपादित करें: जैसा कि मैंने अभी सीखा है, यह आपकी समस्या का समाधान नहीं है। क्षमा करें, मैंने सोचा कि यह एक कोशिश के लायक हो सकता है ...

+0

यूप, दुर्भाग्य से समस्या का समाधान नहीं करता है। हालांकि स्टीफन धन्यवाद। –

-1

यदि आप UIImagePickerController का उपयोग कर रहे हैं, तो वीडियो के लिए कोड निम्न है, समान कोड छवि के लिए भी दर्शाता है।

UIImagePickerController *picker; 
BOOL cameraIsOn; 

फिर कैमरा उपलब्ध

if ([UIImagePickerController isCameraDeviceAvailable:[picker cameraDevice]]) { 
      if (cameraIsOn) { 
       NSLog(@"stop camera"); 
       [picker stopVideoCapture]; 
       cameraIsOn = FALSE; 
      } 
      else { 
       NSLog(@"start camera"); 
       [picker startVideoCapture]; 
       self.videoTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(changeValue) userInfo:nil repeats:YES]; 
       cameraIsOn = TRUE; 
      } 
     } 
0

डिवाइस क्या @Alladinian कहा सबसे उपयोगी था के लिए चेक करें, इस जवाब यह है कि के लिए पूरक है। मैं उसकी AVCaptureSessionDidStartRunningNotification तकनीक का उपयोग करने की अनुशंसा करता हूं क्योंकि यह आपको बताता है कि जब कैमरा प्रारंभ में तैयार होता है (लेकिन इसे केवल एक बार कहा जाता है।) मैं भी चिंतित हूं कि डिवाइस बाद के चित्रों के लिए भी तैयार है या नहीं। मुझे सबसे अच्छा समाधान नहीं मिला है, क्योंकि मुझे उस डिवाइस के लिए कोई कॉल बैक नहीं दिख रहा है जो कैमरे के सत्र का संदर्भ नहीं देता है। लेकिन इस कॉलबैक फ़ंक्शन काफी अच्छा लगता है:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 

नोट कैमरा सबसे अधिक संभावना के लिए तैयार है कि कॉलबैक कहा जाता है से पहले हो जाएगा, और आप एक या दो फोटो में रटना सकता है, लेकिन ऐसा लगता है कि कैमरा निश्चित रूप से हो जाएगा कॉलबैक कहलाता है जब तक तैयार है। यह आपको कई कैमरा शॉट्स के बीच निम्न त्रुटि प्राप्त करने से रोकना चाहिए।

UIImagePickerController: ignoring request to take picture; image is already being captured or camera not yet ready. 
-1

यह रूप में जल्द ही कैमरे के रूप में वीडियो पर कब्जा शुरू करने के लिए यह सुनिश्चित करती है तैयार

imgpicker = [[UIImagePickerController alloc] init]; 
[self presentViewController:imgpicker animated:YES completion:^(void){  
while(![imgpicker startVideoCapture]); 
}]; 
0

UIImagePickerController के लिए दस्तावेज़ के अनुसार है। लेआउटचित्र() विधि फिर से तैयार होती है जब

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

कहा जाता है। यदि इस समय अवधि के दौरान चित्रों को अवरुद्ध करने में आपकी दिलचस्पी है तो मीडिया के साथ कॉल रिटर्न तक बटन इंटरफ़ेस (बटन.userInterfaceEnabled = false) को अक्षम करें। मैंने imagePickerController का उपयोग करके इस समस्या को हल किया।

0

यहाँ एक स्विफ्ट संस्करण है:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.cameraIsReady), name: AVCaptureSessionDidStartRunningNotification, object: nil) 


func cameraIsReady(notification :NSNotification) { 
    print("Camera is ready...") 
} 
+0

यह NSNotification.Name.AVCaptureSessionDidStart अभी चल रहा है :) – Nygashi