मेरे पास AVCaptureVideoPreviewLayer
उदाहरण दृश्य नियंत्रक दृश्य पदानुक्रम में जोड़ा गया है।AVCaptureVideoPreviewLayer गलत अभिविन्यास जब UI रोटेशन अक्षम किया गया है
- (void) loadView {
...
self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:nil];
self.previewLayer.frame = self.view.bounds;
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer addSublayer: _previewLayer];
// adding other UI elements
...
}
...
- (void) _setupPreviewLayerWithSession: (AVCaptureSession*) captureSession
{
self.previewLayer.session = self.captureManager.captureSession;
self.previewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
}
परत फ्रेम -viewDidLayoutSubviews
विधि में अद्यतन किया गया है। देखें नियंत्रक अभिविन्यास UIInterfaceOrientationMaskLandscapeRight
पर बंद कर दिया गया है।
समस्या निम्न प्रकार है:
- उपकरण को लैंडस्केप अभिविन्यास
- दृश्य नियंत्रक रीति से प्रस्तुत किया है में आयोजित किया जाता है - सही ढंग से वीडियो परत को प्रदर्शित करता है।
- डिवाइस को तब लॉक कर दिया जाता है और जब यह लॉक होता है तो डिवाइस पोर्ट्रेट अभिविन्यास पर घुमाया जाता है।
- डिवाइस को तब अनलॉक किया गया है जबकि अभी भी पोर्ट्रेट अभिविन्यास में है और कई सेकंड के लिए वीडियो परत 90 डिग्री घूर्णन प्रदर्शित होती है। हालांकि, वीडियो परत के लिए फ्रेम सही है। अन्य सभी यूआई तत्व सही ढंग से प्रदर्शित होते हैं। कई सेकंड के बाद परत अभिविन्यास को सही करने के लिए snaps।
मैं (बिना किसी परिणाम के) के बाद के रूप में वीडियो परत उन्मुखीकरण को अद्यतन करने की कोशिश की है परत और UI तत्व के लिए सीमा को खोजने
-viewWillTransitionToSize:withTransitionCoordinator:
विधि-viewWillAppear:
यह समस्या वीडियो परत अभिविन्यास से ही जुड़ी प्रतीत नहीं होती है, लेकिन पदानुक्रम लेआउट देखने के लिए अधिक है।
अद्यतन:
सुझाव के रूप में, मैं भी डिवाइस अभिविन्यास परिवर्तन जो मदद नहीं की पर वीडियो परत उन्मुखीकरण को अद्यतन करने की कोशिश की।
मैंने यह भी देखा कि एप्लिकेशन लॉन्च होने के बाद ज्यादातर समस्या होती है और स्क्रीन पहली बार प्रस्तुत की जाती है। उसी सत्र के दौरान बाद में स्क्रीन प्रस्तुतियों पर, इस मुद्दे के लिए पुनरुत्पादन दर वास्तव में कम है (1/20 की तरह कुछ)।
रजिस्टर, समारोह fixOrientation जोड़ने() viewWillAppear पर और enterForeground पर यह कहते हैं, विधि में: UIDevice.current.setValue (NSNumber (मूल्य: UIInterfaceOrientation। portrait.rawValue), forKey: "ओरिएंटेशन") यदि आप इसके परिदृश्य लिफ्ट/दाएं हैं, तो मैंने काम करने की आवश्यकता होगी, मैंने ओबीजे-सी के साथ कुछ साल पहले इस कोड का उपयोग किया था, इसलिए टिप्पणी के रूप में लिखना क्योंकि मैंने – SeanLintern88