⚠️ Orientasi Perangkat! = Orientasi Antarmuka⚠️
Swift 5. * iOS14 dan yang lebih lama
Anda harus benar-benar membuat perbedaan antara:
- Device Orientation => Menunjukkan orientasi perangkat fisik
- Orientasi Antarmuka => Menunjukkan orientasi antarmuka yang ditampilkan di layar
Ada banyak skenario di mana 2 nilai tersebut tidak cocok seperti:
- Saat Anda mengunci orientasi layar Anda
- Saat perangkat Anda datar
Dalam kebanyakan kasus, Anda ingin menggunakan orientasi antarmuka dan Anda bisa mendapatkannya melalui jendela:
private var windowInterfaceOrientation: UIInterfaceOrientation? {
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation
}
Jika Anda juga ingin mendukung <iOS 13 (seperti iOS 12), Anda harus melakukan hal berikut:
private var windowInterfaceOrientation: UIInterfaceOrientation? {
if #available(iOS 13.0, *) {
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation
} else {
return UIApplication.shared.statusBarOrientation
}
}
Sekarang Anda perlu menentukan di mana harus bereaksi terhadap perubahan orientasi antarmuka jendela. Ada banyak cara untuk melakukan itu tetapi solusi optimal adalah melakukannya di dalam
willTransition(to newCollection: UITraitCollection.
Metode UIViewController yang diwariskan yang dapat diganti ini akan dipicu setiap kali orientasi antarmuka diubah. Akibatnya, Anda dapat melakukan semua modifikasi Anda dengan yang terakhir.
Berikut adalah contoh solusi :
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
}
}
Dengan menerapkan metode ini, Anda akan dapat bereaksi terhadap perubahan orientasi apa pun ke antarmuka Anda. Namun perlu diingat bahwa itu tidak akan dipicu pada pembukaan aplikasi sehingga Anda juga harus memperbarui antarmuka Anda secara manual viewWillAppear().
Saya telah membuat proyek contoh yang menggarisbawahi perbedaan antara orientasi perangkat dan orientasi antarmuka. Selain itu, ini akan membantu Anda memahami berbagai perilaku bergantung pada langkah siklus hidup mana yang Anda putuskan untuk memperbarui UI.
Jangan ragu untuk mengkloning dan menjalankan repositori berikut:
https://github.com/wjosset/ReactToOrientation