EntDevice ओरिएंटेशन! = इंटरफ़ेस ओरिएंटेशन Ori
स्विफ्ट 5. * iOS14 और नीचे
आपको वास्तव में बीच में फर्क करना चाहिए:
- डिवाइस ओरिएंटेशन => भौतिक डिवाइस के उन्मुखीकरण को दर्शाता है
- इंटरफ़ेस ओरिएंटेशन => स्क्रीन पर प्रदर्शित इंटरफ़ेस के उन्मुखीकरण को इंगित करता है
ऐसे कई परिदृश्य हैं जहां उन 2 मानों का मेल नहीं हो रहा है जैसे:
- जब आप अपना स्क्रीन ओरिएंटेशन लॉक करते हैं
- जब आपके पास अपना डिवाइस फ्लैट हो
ज्यादातर मामलों में आप इंटरफ़ेस ओरिएंटेशन का उपयोग करना चाहते हैं और आप इसे विंडो के माध्यम से प्राप्त कर सकते हैं:
private var windowInterfaceOrientation: UIInterfaceOrientation? {
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation
}
मामले में आप भी <iOS 13 (जैसे iOS 12) का समर्थन करना चाहते हैं, आप निम्नलिखित कार्य करेंगे:
private var windowInterfaceOrientation: UIInterfaceOrientation? {
if #available(iOS 13.0, *) {
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation
} else {
return UIApplication.shared.statusBarOrientation
}
}
अब आपको यह परिभाषित करने की आवश्यकता है कि विंडो इंटरफ़ेस अभिविन्यास परिवर्तन पर प्रतिक्रिया कहां करें। ऐसा करने के कई तरीके हैं, लेकिन इष्टतम समाधान इसे भीतर करना है
willTransition(to newCollection: UITraitCollection
।
विरासत में मिली यह UIViewController विधि जिसे हर बार ट्रिगर किया जाएगा, इंटरफ़ेस ओरिएंटेशन बदल जाएगा। नतीजतन आप अपने सभी संशोधनों को बाद में कर सकते हैं।
यहाँ एक समाधान उदाहरण है:
class ViewController: UIViewController {
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
super.willTransition(to: newCollection, with: coordinator)
coordinator.animate(alongsideTransition: { (context) in
guard let windowInterfaceOrientation = self.windowInterfaceOrientation else { return }
if windowInterfaceOrientation.isLandscape {
} else {
}
})
}
private var windowInterfaceOrientation: UIInterfaceOrientation? {
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation
}
}
इस पद्धति को लागू करने से आप अपने इंटरफ़ेस में अभिविन्यास के किसी भी परिवर्तन पर प्रतिक्रिया कर पाएंगे। लेकिन ध्यान रखें कि यह ऐप खोलने पर ट्रिगर नहीं होगा इसलिए आपको अपने इंटरफेस को मैन्युअल रूप से अपडेट करना होगा viewWillAppear()
।
मैंने एक नमूना परियोजना बनाई है जो उपकरण अभिविन्यास और इंटरफ़ेस अभिविन्यास के बीच अंतर को रेखांकित करती है। इसके अतिरिक्त यह आपको विभिन्न व्यवहार को समझने में मदद करेगा कि आप अपने यूआई को अपडेट करने के लिए किस जीवन चक्र के आधार पर कदम उठाते हैं।
निम्नलिखित रिपॉजिटरी को क्लोन और चलाने के लिए स्वतंत्र महसूस करें:
https://github.com/wjosset/ReactToOrientation