Уточнение UITraitCollection

#ios #swift #size-classes

#iOS #swift #классы размеров

Вопрос:

Я пытаюсь понять, как использовать UITraitCollection программно, но мне трудно разобраться в этом. Я разрабатываю для iPad retina в iOS 8.

println(self.traitCollection) возвращает следующий вывод:

  <UITraitCollection: 0x10df4c7f0; _UITraitNameUserInterfaceIdiom = Pad,
 _UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Regular, 
 _UITraitNameVerticalSizeClass = Regular, _UITraitNameTouchLevel = 0, 
 _UITraitNameInteractionModel = 1>
 

Что довольно просто.
Но когда я затем поворачиваю экран, я получаю точно такой же результат. Т.Е. Тот же класс вертикального размера и тот же класс горизонтального размера.

Итак, мой вопрос в том, нужно ли мне указывать класс размера, который я хочу для каждой ориентации устройства (насколько я вижу, классы размера доступны только для чтения!), Или я упускаю что-то очевидное? В примере, приведенном в докладе «Что нового в Cocoa-Touch» на видеосайте WWDC 2014, он использует iPhone в качестве примера, который имеет разные классы размеров по вертикали / горизонтали для каждой ориентации устройства.

Как бы вы поступили по этому поводу?

Комментарии:

1. Это имеет смысл, потому что iPad имеет обычный класс размеров как для горизонтального, так и для вертикального, поэтому он не будет меняться при вращении. Однако для iPhone это изменится. На iPad класс размера может изменяться при использовании контроллеров с разделенным просмотром или, вероятно, будущей функции режима разделения экрана

2. Тогда я, должно быть, неправильно понял концепцию классов размеров. Как мой интерфейс узнает, что устройство было повернуто, и соответствующим образом изменит содержимое? Т.Е. Изображения из каталога ресурсов и т. Д.

3. Классы размера предназначены для «детализированных» изменений. Понятие rotated device исчезло в iOS 8, когда вы поворачиваете, ваш VC просто получит изменение границ (на iPad). Если вы действительно хотите обнаружить поворот, вы можете проверить, что высота и ширина поменялись местами.

4. Я бы порекомендовал вам посмотреть соответствующие видео с WWDC :]

5. Круто, это прояснило @JackWu. Но предполагается ли, что вы вручную устанавливаете изображение (допустим, нам нужно установить фоновое изображение) для портрета и для ландшафта с изменением границ?

Ответ №1:

В этом документе (перейдите к Унифицированным раскадровкам для универсальных приложений) объясняются классы размеров как для iPad, так и для iPhone.

Обратите внимание, что iPhone немного сложнее. Все iPad являются обычными-x-обычными в любой ориентации, но классы размеров iPhone меняются в зависимости от ориентации: от обычного (h)-x-Compact (w) в портретной ориентации до Compact-x-Compact в альбомной ориентации.

По слухам, объяснение всех этих изменений заключается в том, что Apple, возможно, скоро представит больше разрешений экрана, а текущее число уже требует набора if-then без этих классов размеров. Чтобы облегчить этот переход, я бы рекомендовал подумать о таких вещах, как адаптивный веб-дизайн, где вы определяете несколько общих макетов, а затем растягиваете их, чтобы они идеально подходили к любому точному размеру в одном из этих макетов.

Редактировать:

1) В случае разрыва ссылки найдите документ Apple «Что нового в iOS», перейдите в раздел iOS8 и найдите «Поддержка новых размеров и масштабов экрана»

2) iPhone 6 имеет обычную ширину в альбомном режиме.