测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | BSD |
发布最后发布 | 2017年7月 |
SwiftSwift 版本 | 3.1 |
SPM支持 SPM | ✗ |
由Emory Al-Imam和Ollie Wagner维护。
YapAnimator 是您快速友好的基于物理的动画系统。YapAnimator 考虑到易用性而构建,确保您保持清醒,使您的艺术家非常非常开心。所有动画都是可中断的,包括完成块,并允许您将力应用于它们(例如,在过渡中添加手势的速度)。我们为一些常用的动画类型(例如 CG
类型)提供了 Animatable
协议一致性,但将其添加到任何其他类型都非常简单。您可以使用任何可以用 Double
数组表示和组合的 任何内容 进行动画 — 视图属性、音乐音量、曲折路径的变形、颜色、平滑笔触等……发挥您的想象力吧!
因为它如此容易使用,并且可以制作出美丽的动画,这就是原因。其他物理动画系统也存在于那里(例如 UIKit 的弹簧动画,Facebook 的 Pop),但它们仍然需要编写太多的代码、记账和过多的指导,这不符合我们的口味。YapAnimator 代表了代码的许多迭代,这是我们多年来在自己的应用程序中使用的。我们认为它非常有价值,并且相信您也会。
YapAnimator 附带了方便的扩展,附加到 CALayer
和 UIView
上,分别在 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))
}
})
欢迎在提交问题。我们会在此处回答,如果回答对其他人有益,也会更新本README/Wiki。
YapAnimator 由 Yap Studios 独家拥有和维护。