Birden çok gezinme denetleyicisine ve / veya sekme görünüm denetleyicisine sahip olmak gibi karmaşık bir görünüm hiyerarşisine sahip olduğunuzda işler oldukça karışık olabilir.
Bu uygulama, Uygulama Temsilcisinin alt görünümleri yineleyerek bulmasına güvenmek yerine, yönlendirmeleri ne zaman kilitlemek istediklerini ayarlamak için onu bireysel görünüm denetleyicilerine koyar.
Hızlı 3, 4, 5
AppDelegate'te:
var orientationLock = UIInterfaceOrientationMask.all
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return self.orientationLock
}
Başka bir global yapı veya yardımcı sınıfta, burada AppUtility'yi yarattım:
struct AppUtility {
static func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
if let delegate = UIApplication.shared.delegate as? AppDelegate {
delegate.orientationLock = orientation
}
}
static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {
self.lockOrientation(orientation)
UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
}
}
Ardından istenen ViewController'da yönleri kilitlemek istiyorsunuz:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
AppUtility.lockOrientation(.portrait)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
AppUtility.lockOrientation(.all)
}
İPad veya Evrensel Uygulama ise
Hedef Ayarları -> Genel -> Dağıtım Bilgileri'nde "Tam ekran gerektirir" seçeneğinin işaretlendiğinden emin olun. supportedInterfaceOrientationsFor
Bu işaretlenmezse delege aranmayacaktır.