कैमरे का उपयोग करते समय रोटेशन का पता लगाने की आवश्यकता है AVFoundation
, और पाया कि didRotate
( अब पदावनत ) और willTransition
विधियाँ मेरी आवश्यकताओं के लिए अविश्वसनीय थीं। डेविड द्वारा पोस्ट की गई अधिसूचना का उपयोग करते हुए काम किया, लेकिन स्विफ्ट 3.x / 4.x के लिए वर्तमान नहीं है।
स्विफ्ट 4.2
अधिसूचना नाम बदल दिया गया है।
बंद मूल्य स्विफ्ट 4.0 के समान ही रहता है:
var didRotate: (Notification) -> Void = { notification in
switch UIDevice.current.orientation {
case .landscapeLeft, .landscapeRight:
print("landscape")
case .portrait, .portraitUpsideDown:
print("Portrait")
default:
print("other")
}
}
स्विफ्ट 4.2 के लिए अधिसूचना सेट करने के लिए :
NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification,
object: nil,
queue: .main,
using: didRotate)
स्विफ्ट 4.2 के लिए अधिसूचना फाड़ने के लिए :
NotificationCenter.default.removeObserver(self,
name: UIDevice.orientationDidChangeNotification,
object: nil)
पदावनत बयान के संबंध में , मेरी प्रारंभिक टिप्पणी भ्रामक थी, इसलिए मैं इसे अद्यतन करना चाहता था। जैसा कि उल्लेख @objc
किया गया है, अनुमान का उपयोग पदावनत किया गया है, जो बदले में ए का उपयोग करने की आवश्यकता थी #selector
। इसके बजाय एक क्लोजर का उपयोग करके, इससे बचा जा सकता है और आपके पास अब एक समाधान है जिसे अमान्य चयनकर्ता को कॉल करने के कारण क्रैश से बचना चाहिए।
यहाँ नीचे सब कुछ XCode 10 और iOS 4.2 के रूप में अप्रचलित है
स्विफ्ट 4.0 स्विफ्ट 4.0 के
साथ, Apple ने हमें इसके इस्तेमाल से बचने के लिए प्रोत्साहित किया है #selector
, इसलिए यह दृष्टिकोण अब एक पूर्ण ब्लॉक का उपयोग करता है। यह दृष्टिकोण स्विफ्ट 3.x के साथ भी पीछे की ओर संगत है और आगे जाने के लिए अनुशंसित दृष्टिकोण होगा।
यह संकलक चेतावनी है जिसे आप स्विफ्ट 4.x परियोजना में प्राप्त करेंगे यदि आप अनुमान #selector
के अपव्यय के कारण फ़ंक्शन का उपयोग करते @objc
हैं:
इस परिवर्तन पर तेजी से विकास में प्रवेश ।
कॉलबैक सेट करें:
// If you do not use the notification var in your callback,
// you can safely replace it with _
var didRotate: (Notification) -> Void = { notification in
switch UIDevice.current.orientation {
case .landscapeLeft, .landscapeRight:
print("landscape")
case .portrait, .portraitUpsideDown:
print("Portrait")
default:
print("other")
}
}
अधिसूचना सेट करें:
NotificationCenter.default.addObserver(forName: .UIDeviceOrientationDidChange,
object: nil,
queue: .main,
using: didRotate)
इसके चीथड़े कर दो:
NotificationCenter.default.removeObserver(self, name: .UIDeviceOrientationDidChange, object: nil)