2013-06-18 4 views
0

У меня прямоугольный вид с двумя метками (один статический, один динамический), установленный из xib. Когда пользователь коснется представления, у меня есть контракт и скрыть метки (используя UIView-animateWithDuration: animations:).Как вернуть представление в исходное состояние после его анимации?

Есть ли способ сохранить контекст только вида и вернуться к нему позже?

Я знаю, что есть UIGraphicsGetCurrentContext, но в документации только говорится: Возвращает графический контекст, который я угадываю, это весь вид. (Что ужасная документация!)

Это кажется, что это возможно, и с общим CALayers, но это только UIView метод, и я не уверен, если он использует CALayers в его реализации.

ответ

1

Так, чтобы ответить на некоторые из ваших вопросов:

Во-первых, UIView является по своей сути является оболочкой для CALayer. Вы можете получить доступ к базовому CALayer через вид layer вида. Если вы делаете много анимационной работы, вы, вероятно, найдете это очень полезным в какой-то момент. «Графический контекст», в смысле слова iOS, является в основном местом, где хранится информация о текущем состоянии чертежа.

Методы удобства, которые UIView обеспечивает анимацию (animateWithDuration и т. Д.), Автоматически устанавливают рамки, рамки и т. Д. Вида на их вновь анимированные значения после завершения анимации. Поэтому вы захотите сохранить все значения, которые вы изменяете, чтобы при необходимости можно было вернуться к ним. Обратите внимание, что это может не быть просто быть рамкой - если вы меняете альфа-значения, которые вы хотите повесить на них, и т. Д. И т. Д.

Есть и другие варианты, которые вы можете попробовать, но они вовлекайте использование немного более низких уровней API базовой анимации. Этот существующий вопрос StackOverflow имеет очень хорошее резюме: UIView animations with Autoreverse

2

Нет, вы не можете легко сохранять и восстанавливать содержимое всего вида и содержимого. UIGraphicsGetCurrentContext можно использовать для изображения UIView, но не для сохранения местоположений подвид.

Вместо этого сохраните два набора кадров для каждого подсмотра, а затем переключайтесь между ними, установив mySubview.frame.

+0

Yup, сохраняя и восстанавливая рамки для вашего вида, и любые подзаголовки должны быть легкими и делать то, что вы хотите. Более глубокая хитрость CA не должна быть необходимой. – cbowns

Смежные вопросы