Apple рекомендує використовувати класи розмірів як грубую міру того, скільки місця на екрані є, щоб ваш інтерфейс міг значно змінити його макет і зовнішній вигляд. Вважайте, що iPad у портреті має ті ж класи розмірів, що й у ландшафті (Регулярна ширина, Регулярна висота). Це означає, що ваш інтерфейс повинен бути більш-менш схожим між двома орієнтаціями.
Однак перехід від портретного до ландшафтного в iPad є досить значним, що вам може знадобитися внести деякі менші налаштування інтерфейсу користувача, навіть якщо класи розмірів не змінилися. Оскільки методи, пов'язані з орієнтацією на інтерфейс UIViewController
, були застарілими, Apple тепер рекомендує застосовувати наступний новий метод UIViewController
як заміну:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Code here will execute before the rotation begins.
// Equivalent to placing it in the deprecated method -[willRotateToInterfaceOrientation:duration:]
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
// Place code here to perform animations during the rotation.
// You can pass nil or leave this block empty if not necessary.
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
// Code here will execute after the rotation has finished.
// Equivalent to placing it in the deprecated method -[didRotateFromInterfaceOrientation:]
}];
}
Чудово! Тепер ви отримуєте зворотній зв'язок перед початком обертання та після його завершення. Але як насправді знати, чи обертання - це портрет чи пейзаж?
Apple рекомендує думати про обертання як про просто зміну розміру батьківського подання. Іншими словами, під час обертання iPad від портрета до пейзажу, ви можете вважати це переглядом кореневого рівня, просто змінюючи його bounds.size
з {768, 1024}
на {1024, 768}
. Знаючи це , то ви повинні використовувати size
передаються в viewWillTransitionToSize:withTransitionCoordinator:
метод вище , щоб з'ясувати , є чи ви обертаючись портрет або пейзаж.
Якщо ви хочете зробити ще більш легким способом переміщення застарілого коду до нового способу виконання iOS 8, спробуйте скористатися цією простою категорією на UIView, яка може бути використана для визначення того, чи подання є "портретним" чи "пейзажним" на основі його розмір.
Для резюме:
- Ви повинні використовувати класи розмірів, щоб визначити, коли відображати принципово різні інтерфейси користувача (наприклад, користувальницький інтерфейс, подібний до iPhone, порівняно з інтерфейсом, подібним до iPad)
- Якщо вам потрібно зробити менші налаштування вашого інтерфейсу, коли класи розмірів не змінюються, але розмір контейнера (батьківського виду) робить, наприклад, коли обертається iPad, використовуйте
viewWillTransitionToSize:withTransitionCoordinator:
зворотний виклик у UIViewController.
- Кожен погляд у вашій програмі повинен приймати рішення лише щодо макета, виходячи з простору, який йому було надано для розміщення. Нехай природна ієрархія поглядів зменшує цю інформацію.
- Аналогічно, не використовуйте
statusBarOrientation
- що в основному є властивістю на рівні пристрою - для визначення, чи планувати подання для "портрет" проти "пейзаж". Орієнтацію на рядок стану слід використовувати лише за допомогою коду, який стосується речей, UIWindow
які насправді живуть на самому кореневому рівні програми.
UIViewController
. Дивіться розділ під назвою "Поводження з обертаннями перегляду". Там пояснюється, що вам потрібно зробити.