YapAnimator 1.2.0

YapAnimator 1.2.0

测试已测试
Lang语言 SwiftSwift
许可证 BSD
发布最后发布2017年7月
SwiftSwift 版本3.1
SPM支持 SPM

Emory Al-ImamOllie Wagner维护。



  • Yap Studios 提供

YapAnimator 是您快速友好的基于物理的动画系统。YapAnimator 考虑到易用性而构建,确保您保持清醒,使您的艺术家非常非常开心。所有动画都是可中断的,包括完成块,并允许您将力应用于它们(例如,在过渡中添加手势的速度)。我们为一些常用的动画类型(例如 CG 类型)提供了 Animatable 协议一致性,但将其添加到任何其他类型都非常简单。您可以使用任何可以用 Double 数组表示和组合的 任何内容 进行动画 — 视图属性、音乐音量、曲折路径的变形、颜色、平滑笔触等……发挥您的想象力吧!

为什么使用 YapAnimator?

因为它如此容易使用,并且可以制作出美丽的动画,这就是原因。其他物理动画系统也存在于那里(例如 UIKit 的弹簧动画,Facebook 的 Pop),但它们仍然需要编写太多的代码、记账和过多的指导,这不符合我们的口味。YapAnimator 代表了代码的许多迭代,这是我们多年来在自己的应用程序中使用的。我们认为它非常有价值,并且相信您也会。

内置扩展

YapAnimator 附带了方便的扩展,附加到 CALayerUIView 上,分别在 animatedLayeranimated 属性下提供单行动画。

CircleAnimationExample

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
})

SquareFrameExample

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 独家拥有和维护。