KRAnimationKit
KRAnimationKit 是一个使 Swift 开发者能够轻松进行动画的库。
[](https://travis-ci.org/Joshua Park/KRAnimationKit)
简介
KRAnimationKit 是一个强大的动画工具包,可以非常轻松地实现复杂动画。
受 JHChainableAnimations 启发,KRAnimationKit 提供了结构更清晰且更强大的动画体验。
不仅可以通过 KRAnimationKit 连接动画,还可以轻松地连接同时动画,甚至是连接多个视图的同时动画。
示例
要运行示例项目,首先克隆仓库,然后从示例目录运行pod install
。
要求
KRAnimationKit采用了大量的Swift 2.2语法和特性。库的语法或某些特性在Objective-C中可能不可用。
安装
KRAnimationKit可通过CocoaPods获取。要安装,只需将以下行添加到您的Podfile中
pod 'KRAnimationKit', :git => 'https://github.com/BridgeTheGap/KRAnimationKit.git'
语法
基本动画
对于不带链的简单动画
import KRAnimationKit
// Default
viewBox.animateX(50.0, duration: 1.0)
// + timing function
viewBox.animateX(50.0, duration: 1.0, function: .EaseInQuad)
// + reverse
viewBox.animateX(50.0, duration: 1.0, reverses: true)
// + repeat
viewBox.animateX(50.0, duration: 1.0, repeatCount: 10)
// + completion
viewBox.animateX(50.0, duration: 1.0) {
print("COMPLETION")
}
参数reverses
、repeatCount
和completion
是默认参数,因此根据需要填写它们。
延迟动画
为了延迟动画的开始,请使用after(_: Double)
。参数以秒为单位。
viewBox.after(0.5).animateY(200.0, duration: 1.0, function: .EaseInCubic)
链式动画
链式动画不仅可以应用于相同的视图中,也可以应用于不同的视图,如下所示
// Use `KRAnimation.chain()` static method
// For views, use chain functions instead of animate functions
// Basic chaining with two views
KRAnimation.chain(
// animate viewBox
viewBox.chainY(300.0, duration: 1.0, function: .EaseInQuad),
viewBox.chainY(0.0, duration: 1.0, function: .EaseOutQuad),
// animate viewBox2
viewBox2.chainX(bottomY, duration: 1.0, function: .EaseInOutQuad)
)
// + reverses, repeatCount, completion
KRAnimation.chain(
viewBox.chainY(bottomY, duration: 1.0, function: .EaseInBounce),
viewBox.chainY(0.0, duration: 1.0, function: .EaseOutBounce),
viewBox2.chainY(58.0, duration: 1.0, function: .EaseInOutBounce),
reverses: false, repeatCount: 1
) {
print("COMPLETION")
}
同时链式动画
要同时链入两个或以上的动画,只需要使用+
符号,如下所示
KRAnimation.chain(
// Simultaneously applying four animations on two different views
viewBox.chainX(300.0, duration: 1.0) + viewBox.chainBackgroundColor(UIColor.blueColor(), duration: 1.0) + viewBox2.chainAlpha(0.5, duration: 1.0) + viewBox2.chainBackgroundColor(UIColor.cyanColor(), duration: 1.0),
viewBox.chainX(0.0, duration: 1.0, function: .EaseInOutCubic) + viewBox.chainBackgroundColor(UIColor.redColor(), duration: 1.0),
)
时间函数
KRAnimationKit使用KRTimingFunction,这是一个将JQuery 时间函数移植到Swift的版本。
支持的时间函数如下
线性
EaseInSine EaseOutSine EaseInOutSine
EaseInQuad EaseOutQuad EaseInOutQuad
EaseInCubic EaseOutCubic EaseInOutCubic
EaseInQuart EaseOutQuart EaseInOutQuart
EaseInQuint EaseOutQuint EaseInOutQuint
EaseInExpo EaseOutExpo EaseInOutExpo
EaseInCirc EaseOutCirc EaseInOutCirc
EaseInBack EaseOutBack EaseInOutBack
EaseInElastic EaseOutElastic EaseInOutElastic
EaseInBounce EaseOutBounce EaseInOutBounce
更多解释和这些函数的视觉表示可以在Easings中找到
可动画属性
KRAnimationKit支持大多数CALayer的可动画属性,如Core Animation 编程指南中所述。
以下是目前不可用的属性列表
- anchorPoint ?
- backgroundFilters ?
- compositingFilter ?
- contents ?
- contentsRect ?
- filters?
- hidden X
- mask *
- masksToBounds *
- shadowPath *
- sublayers ?
- sublayerTransform ?
- transform *
- zPosition *
==============================================================
- *: 计划支持以后
- ?: 目前未设置为支持
- X: 将不支持
注意事项
由于 KRAnimationKit 使用基于层的动画--它使用 CAAnimation
,某些 UIView
子视图可能无法按预期工作。
UILabel
根据这篇 StackOverflow 帖子,UILabel
及其 layer
的 backgroundColor
属性并不相同。动画仅应用于层级别,因此使用具有不同视图和层颜色的动画对 UILabel
实例进行动画可能会产生意外的行为。
Frame.size 与 Bounds.size
当进行动画时,frame.size
和 bounds.size
展现了不同的行为,即当 anchorPoint
设为 (0.0, 0.0)
时,frame
方式用于缩放大小变,而 bounds
则从中心缩放,即 anchorPoint
为 (0.5, 0.5)
。这种行为在 UIView
动画中使用时可观察。
这种在各钟乐汇话保留在 KRAnimationKit 中,并且 animateSize
函数动画 bounds.frame
,即如果您使用 animateSize
来动画视图的大小,其中心将保持不变,而 frame.origin
属性将被影响。
如果这不是您想要的缩放动画,并且您希望以 frame.origin
作为锚点来更改大小,您可以使用 animateFrame
函数或手动将视图的 anchorPoint
属性设置为您 CGPointMake(0.0, 0.0)
并使用 animateSize
函数。
作者
许可证
KRAnimationKit适用于MIT许可证。有关更多信息,请参阅LICENSE文件。