⚠️Cihaz Yönü! = Arayüz Yönlendirmesi⚠️
Swift 5. * iOS14 ve altı
Aşağıdakiler arasında gerçekten bir fark yaratmalısınız:
- Aygıt Yönü => Fiziksel aygıtın yönünü gösterir
- Arayüz Yönü => Ekranda görüntülenen arayüzün yönünü belirtir
Bu 2 değerin uyumsuz olduğu birçok senaryo vardır, örneğin:
- Ekran yönünüzü kilitlediğinizde
- Cihazınızı düz tuttuğunuzda
Çoğu durumda arayüz yönünü kullanmak istersiniz ve bunu pencereden alabilirsiniz:
private var windowInterfaceOrientation: UIInterfaceOrientation? {
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation
}
Ayrıca <iOS 13'ü (iOS 12 gibi) desteklemek istemeniz durumunda şunları yaparsınız:
private var windowInterfaceOrientation: UIInterfaceOrientation? {
if #available(iOS 13.0, *) {
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation
} else {
return UIApplication.shared.statusBarOrientation
}
}
Şimdi, pencere arayüzü yönelim değişikliğine nerede tepki vereceğinizi tanımlamanız gerekiyor. Bunu yapmanın birden fazla yolu vardır, ancak en uygun çözüm bunu kendi içinde yapmaktır
willTransition(to newCollection: UITraitCollection.
Geçersiz kılınabilen bu miras alınan UIViewController yöntemi, arayüz yönü her değiştiğinde tetiklenecektir. Sonuç olarak, tüm değişikliklerinizi ikincisinde yapabilirsiniz.
İşte bir çözüm örneği:
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
}
}
Bu yöntemi uygulayarak, arayüzünüzdeki herhangi bir yönelim değişikliğine tepki verebileceksiniz. Ancak uygulamanın açılışında tetiklenmeyeceğini, bu nedenle arayüzünüzü manuel olarak güncellemeniz gerekeceğini unutmayın viewWillAppear().
Cihaz yönlendirmesi ve arayüz yönlendirmesi arasındaki farkın altını çizen örnek bir proje oluşturdum. Ek olarak, kullanıcı arayüzünüzü güncellemeye karar verdiğiniz yaşam döngüsü adımına bağlı olarak farklı davranışları anlamanıza yardımcı olacaktır.
Aşağıdaki depoyu klonlamaktan ve çalıştırmaktan çekinmeyin:
https://github.com/wjosset/ReactToOrientation