Использование программ классов по размеру

Я (надеюсь) смотрел все соответствующие видеозаписи сессии WWDC2014 и читал документы, поэтому этот вопрос в основном подтверждает мои подозрения, но, пожалуйста, просветите меня.

То, что я хочу сделать, - это анимированные представления, используя Auto Layout. Это само по себе не проблема. Но конечные точки этих анимаций меняются с разными ориентациями. Я думал, что могу использовать классы размера для автоматического перемещения представлений при ротации, но руководство Apple по разработке говорит, что анимации нужно делать программно, и из того, что я могу собрать, классы размера - это только интерфейс-Builder.

Еще одна идея, которую я использовал, - это использовать настраиваемые макеты, такие как верхний/нижний IB, но они кажутся жестко закодированными.

Последнее, что я могу сделать, - это ограничение обновления вручную после прослушивания событий ротации, но это ничего нового, и я чувствую, что классы размера должны использоваться только для статических интерфейсов. Я переоцениваю их цель?

TL;DR: Учитывая две точки A и B, которые могут иметь начало представления (из-за анимации), как я могу перемещать обе точки с помощью классов размера или что-то подобное?

Ответы

Ответ 1

После некоторого дополнительного копирования в документах я наконец нашел что-то полезное. Протокол UIContentContainer определяет willTransitionToTraitCollection(:withTransitionCoordinator:), а первый параметр метода (a UITraitCollection) содержит классы горизонтального и вертикального размера, а также UIUserInterfaceIdiom (который может использоваться для определения того, работает ли приложение на iPhone или iPad, хотя классы размера должны использоваться для большинства вещей).

Кроме того, поскольку iOS 8 скрывает строку состояния в альбомном режиме, traitCollectionDidChange(previousTraitCollection:) - это соответствующий метод, который вызывается после того, как произошло изменение, поэтому значение UIApplication.sharedApplication().statusBarHidden изменилось при вызове этого метода. Может быть полезно для UIScrollView contentInset, например.

Наконец, если вам нужны точные размеры экрана (в точках, конечно, но вышеупомянутая коллекция признаков также знает о плотности пикселей), есть viewWillTransitionToSize(:withTransitionCoordinator:).

Надеюсь, это тоже поможет кому-то другому.