2013-02-11 67 views
12

मैं AVCaptureSession का उपयोग कर कैमरे के साथ एक छवि कैप्चर करना चाहता हूं।आईओएस: कैमरा अभिविन्यास

यह ठीक काम करता है, मैं कैमरा शुरू करता हूं और मैं आउटपुट प्राप्त कर सकता हूं। हालांकि, जब मैं डिवाइस को घुमाता हूं तो मुझे वीडियो अभिविन्यास के साथ कुछ समस्याएं होती हैं।

सबसे पहले, मैं परिदृश्य बाएं और दाएं ओरिएंटेशन का समर्थन करना चाहता हूं और बाद में पोर्ट्रेट मोड भी हो सकता हूं।

मैं लागू:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation{ 
return UIInterfaceOrientationIsLandscapse(interfaceOrientation); 
} 

जब मैं डिवाइस घुमाने के लिए, यह एप्लिकेशन घूमता परिदृश्य परिदृश्य सही या ठीक इसके विपरीत बाएं से, लेकिन मैं केवल कैमरा सही ढंग से देखने के लिए जब मैं परिदृश्य बाईं तरफ हूँ। जब ऐप परिदृश्य पर सही होता है, तो वीडियो 180 डिग्री से घूर्णन होता है।

बहुत बहुत धन्यवाद।

अद्यतन:

मैं Spectravideo328 जवाब की कोशिश की है लेकिन मुझे एक त्रुटि है जब मैं डिवाइस और ऐप दुर्घटना बारी बारी से करने का प्रयास करें।

[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210 

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210' 

त्रुटि इस पंक्ति में होती है::

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection; 

मैं इसे shouldAutorotateToInterfaceOrientation विधि के अंदर डाल यह त्रुटि है। क्या आप जानते हैं कि इस त्रुटि का कारण क्या हो सकता है?

धन्यवाद

उत्तर

23

डिफ़ॉल्ट कैमरा उन्मुखीकरण अजीब तरह से पर्याप्त UIInterfaceOrientationLeft है।

कैमरा अभिविन्यास डिवाइस के घूर्णन के साथ नहीं बदलता है। वे अलग हैं। आप मैन्युअल रूप से कैमरा उन्मुखीकरण समायोजित करना:

रखो एक विधि है कि आप करने के लिए toInterfaceOrientation पारित में निम्नलिखित (शायद आप इसे shouldAutorotateToInterfaceOrientation से ऊपर इतना है कि फोन डिवाइस घूमता है और कैमरा घूमता है):

आप करने के लिए है पूर्वावलोकन लेयर कनेक्शन पहले

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection; 

if ([previewLayerConnection isVideoOrientationSupported]) 
{ 
    switch (toInterfaceOrientation) 
    { 
     case UIInterfaceOrientationPortrait: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait]; 
      break; 
     case UIInterfaceOrientationLandscapeRight: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; //home button on right. Refer to .h not doc 
      break; 
     case UIInterfaceOrientationLandscapeLeft: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft]; //home button on left. Refer to .h not doc 
      break; 
     default: 
      [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait]; //for portrait upside down. Refer to .h not doc 
      break; 
    } 
} 
+0

यह समाधान मेरे लिए काम नहीं करता है। यह कुछ भी नहीं करता है ... मैं [self.prevLayer setOrientation: [[UIDevice currentDevice] अभिविन्यास] का उपयोग कर समस्या का समाधान करता हूं]। लेकिन सेटऑरिएंटेशन को हटा दिया गया है, इसलिए यह एक अच्छा समाधान नहीं है। धन्यवाद –

+2

@ एविला, आपने प्रश्न में वर्णित किया है, कैमरा अभिविन्यास और पूर्वावलोकन परत अभिविन्यास नहीं। बस भविष्य के संदर्भ के लिए, AVCaptureSession 2 अलग कनेक्शन बनाता है (पूर्वावलोकन परत और कैमरा आउटपुट के लिए) और आपको अलग-अलग दोनों को घूमना होगा! मैंने उपरोक्त पूर्वावलोकन परत अभिविन्यास के लिए अपना उत्तर अपडेट किया। – Spectravideo328

+0

आपके उत्तर के लिए धन्यवाद। मैंने कोशिश की है लेकिन मुझे एक त्रुटि है। मैं त्रुटि जानकारी के साथ सवाल अद्यतन। क्या आप जानते हैं कि समस्या क्या है? बहुत बहुत धन्यवाद। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^