
Yapanimator -ваша система быстрой и дружелюбной анимации на основе физики. Япаниматор был построен с учетом легкого использования, что удерживает вас в здравом уме и ваш дизайнер очень, очень счастлив. Все анимации прерываются, включают блоки завершения и позволяют применять их силы (например, добавление скорости из жеста в переходе). Мы включили Animatable соответствие протокола для некоторых обычно анимированных типов (типов CG ), но очень легко добавить соответствие любому другому типу. Вы можете анимировать все , что вы можете представлять и сочинять с помощью массива Double S - видовых свойств, громкости музыки, переворачивания между путем с пахтными путями, цветами, сглаживанием мазков щетки, список можно продолжать ... Используйте свое воображение!
Поскольку это безумно проще в использовании и делает красивые анимации, вот почему. Существуют другие анимационные системы, основанные на физике (например, весенняя анимация Uikit, Pop Facebook), но им все же требуется написание слишком большого количества кода, бухгалтерии и удержания рук для нашего вкуса. Yapanimator представляет собой дистиллированную N-ту итерацию кода, которую мы использовали в наших собственных приложениях в течение многих лет. Мы находим это неоценимым в нашем повседневном дне и думаем, что вы тоже.
Yapanimator поставляется с удобным расширением, прикрепленным к CALayer и UIView / NSView , предоставляя анимации с одной линией под animatedLayer и animated свойствами, соответственно.

func handle ( gesture : UIPanGestureRecognizer ) {
if gesture . state == . began {
squircle . animated . cornerRadius . animate ( to : squircle . bounds . width / 2.0 )
squircle . animated . rotationZ . animate ( to : . pi )
else if gesture . state == . changed {
squircle . animated . position . instant ( to : gesture . location ( in : nil ) )
} else if gesture . state == . ended {
squircle . animated . position . animate ( to : self . view . center )
squircle . animated . cornerRadius . animate ( to : 0 )
squircle . animated . rotationZ . animate ( to : 0 )
}
} Создание пользовательского аниматора проста:
initialValue это устанавливает начальное значение аниматора и сообщает, какой тип он будет анимировать.willBegin позвонил непосредственно перед началом движения. Верните фактическое значение свойства, которое вы будете анимировать. Это позволяет аниматору синхронизировать с этим значением, если он был изменен вне объема аниматора. (необязательный)eachFrame называется каждый кадр анимации - это обычно, где вы применяете current.value аниматор. Вы также можете использовать его для проверки значений для запуска других действий / анимации. frameAnimator = YapAnimator ( initialValue : square . frame , willBegin : { [ unowned self ] in
return self . square . frame
} , eachFrame : { [ unowned self ] ( animator ) in
self . square . frame = animator . current . value
} ) 
frameAnimator . bounciness = 1.5
frameAnimator . animate ( to : square . frame . insetBy ( dx : - 50 , dy : - 50 ) , completion : { animator , wasInterrupted in
if !wasInterrupted {
// animate back to the original value
animator . animate ( to : animator . current . value . insetBy ( dx : 50 , dy : 50 ) )
}
} ) Не стесняйтесь задавать свой вопрос в проблеме. Мы ответим там и изменим это прочитать мне/начать вики, если ответ кажется, что он принесет пользу другим.
Yapanimator принадлежит и поддерживается YAP Studios.