简单界面核心动画
Sica可以按顺序或并行执行各种动画。
特性
- 带时长和延迟的动画
- 并行/顺序动画
- 缓动
- 弹簧
- 过渡
需求
- Xcode 9.3或更高版本
- iOS 9或更高版本
- tvOS 10.0或更高版本
- macOS 10.11或更高版本
- Swift 4.2(自0.3.4起)
安装
Carthage
如果您正在使用Carthage,只需将Sica添加到您的Cartfile
github "cats-oss/Sica"
CocoaPods
Sica 可以通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile 中
pod 'Sica'
Swift Package Manager
Sica 也可通过 SwiftPM
获取,创建 Package.swift
文件并添加 dependencies
值
dependencies: [
.package(url: "https://github.com/cats-oss/Sica.git", from: "0.4.1")
]
相关链接:GitHub - j-channings/swift-package-manager-ios: 使用 SPM v4 管理 iOS 依赖的示例
使用方法
示例动画
序列动画
如果您设置了 .sequence
,则显示序列动画。
let animator = Animator(view: sampleView)
animator
.addBasicAnimation(keyPath: .positionX, from: 50, to: 150, duration: 2, timingFunction: .easeOutExpo)
.addSpringAnimation(keyPath: .boundsSize, from: sampleView.frame.size, to: CGSize(width: 240, height: 240), damping: 12, mass: 1, stiffness: 240, initialVelocity: 0, duration: 1)
.run(type: .sequence)
并行动画
如果您设置了 .parallel
,则显示并行动画。
let animator = Animator(view: sampleView)
animator
.addBasicAnimation(keyPath: .positionX, from: 50, to: 150, duration: 5, timingFunction: .easeOutExpo)
.addBasicAnimation(keyPath: .transformRotationZ, from: 0, to: CGFloat.pi, duration: 3, timingFunction: .easeOutExpo)
.run(type: .parallel)
无限循环动画
在调用 run
之前设置 forever
,将显示永恒动画。
let animator = Animator(view: sampleView)
animator
.addBasicAnimation(keyPath: .positionX, from: 50, to: 150, duration: 2, timingFunction: .easeOutExpo)
.addBasicAnimation(keyPath: .positionX, from: 150, to: 50, duration: 2, timingFunction: .easeOutExpo)
.forever(autoreverses: false)
.run(type: .sequence)
取消
如果想要取消动画,应调用 cancel
。
let animator = Animator(view: sampleView)
/*
Add animation and run
*/
animator.cancel() // Animation cancel
移除添加的动画
如果先调用 run
,然后调用添加动画方法,将不会添加任何动画。如果你再次使用 animator,请在调用 addBasicAnimation
、addSpringAnimation
或 addTransitionAnimation
之前调用 removeAll
。
let animator = Animator(view: sampleView)
/*
Add animation and run
*/
// Bad
animator.addBasicAnimation() // 🙅 you can't add animation
// Good
animator.removeAll()
.addBasicAnimation() // 🙆 You can add animation.
函数
添加动画
public func addBasicAnimation<T>(keyPath: Sica.AnimationKeyPath<T>, from: T, to: T, duration: Double, delay: Double = default, timingFunction: Sica.TimingFunction = default) -> Self where T : AnimationValueType
public func addSpringAnimation<T>(keyPath: Sica.AnimationKeyPath<T>, from: T, to: T, damping: CGFloat, mass: CGFloat, stiffness: CGFloat, initialVelocity: CGFloat, duration: Double, delay: Double = default, timingFunction: Sica.TimingFunction = default) -> Self where T : AnimationValueType
public func addTransitionAnimation(startProgress: Float, endProgress: Float, type: Sica.Transition, subtype: Sica.TransitionSub, duration: Double, delay: Double = default, timingFunction: Sica.TimingFunction = default) -> Self
添加动画选项
public func delay(_ delay: Double) -> Self
public func forever(autoreverses: Bool = default) -> Self
动画操作
public func run(type: Sica.Animator.AnimationPlayType, isRemovedOnCompletion: Bool = default, completion: (() -> Swift.Void)? = default)
public func cancel()
public func removeAll() -> Self
扩展
您可以在 UIView
和 CALayer
中访问 sica 属性。
let view = UIView(frame: ...)
view.sica
.addBasicAnimation(keyPath: .positionX, from: 50, to: 150, duration: 2, timingFunction: .easeOutExpo)
.run(type: .sequence)
let layer = CALayer()
layer.sica
.addBasicAnimation(keyPath: .positionX, from: 50, to: 150, duration: 2, timingFunction: .easeOutExpo)
.run(type: .sequence)
支持
动画
- CABasicAnimation
- CATransition
- CASpringAnimation
AnimationPlayType
你可以选择动画播放类型
- 依次运行动画
- 并行运行动画
EasingFunctions
你可以选择各种计时函数
KeyPaths 表格
Sica | KeyPath |
---|---|
.anchorPoint |
anchorPoint |
.backgroundColor |
backgroundColor |
.borderColor |
borderColor |
.borderWidth |
borderWidth |
.bounds |
bounds |
.contents |
contents |
.contentsRect |
contentsRect |
.cornerRadius |
cornerRadius |
.filters |
filters |
.frame |
frame |
.hidden |
hidden |
.mask |
mask |
.masksToBounds |
masksToBounds |
.opacity |
opacity |
.path |
path |
.position |
position |
.shadowColor |
shadowColor |
.shadowOffset |
shadowOffset |
.shadowOpacity |
shadowOpacity |
.shadowPath |
shadowPath |
.shadowRadius |
shadowRadius |
.sublayers |
sublayers |
.sublayerTransform |
sublayerTransform |
.transform |
transform |
.zPosition |
zPosition |
锚点位置
Sica | KeyPath |
---|---|
.anchorPointX |
anchorPoint.x |
.anchorPointy |
anchorPoint.y |
边界
Sica | KeyPath |
---|---|
.boundsOrigin |
bounds.origin |
.boundsOriginX |
bounds.origin.x |
.boundsOriginY |
bounds.origin.y |
.boundsSize |
bounds.size |
.boundsSizeWidth |
bounds.size.width |
.boundsSizeHeight |
bounds.size.height |
内容
Sica | KeyPath |
---|---|
.contentsRectOrigin |
contentsRect.origin |
.contentsRectOriginX |
contentsRect.origin.x |
.contentsRectOriginY |
contentsRect.origin.y |
.contentsRectSize |
contentsRect.size |
.contentsRectSizeWidth |
contentsRect.size.width |
.contentsRectSizeHeight |
contentsRect.size.height |
框架
Sica | KeyPath |
---|---|
.frameOrigin |
frame.origin |
.frameOriginX |
frame.origin.x |
.frameOriginY |
frame.origin.y |
.frameSize |
frame.size |
.frameSizeWidth |
frame.size.width |
.frameSizeHeight |
frame.size.height |
位置
Sica | KeyPath |
---|---|
.positionX |
position.x |
.positionY |
position.y |
阴影偏移
Sica | KeyPath |
---|---|
.shadowOffsetWidth |
shadowOffset.width |
阴影偏移高度 |
shadowOffset.height |
子层变换
Sica | KeyPath |
---|---|
.sublayerTransformRotationX |
sublayerTransform.rotation.x |
.sublayerTransformRotationY |
sublayerTransform.rotation.y |
.sublayerTransformRotationZ |
sublayerTransform.rotation.z |
.sublayerTransformScaleX |
sublayerTransform.scale.x |
.sublayerTransformScaleY |
sublayerTransform.scale.y |
.sublayerTransformScaleZ |
sublayerTransform.scale.z |
.sublayerTransformTranslationX |
sublayerTransform.translation.x |
.sublayerTransformTranslationY |
sublayerTransform.translation.y |
.sublayerTransformTranslationZ |
sublayerTransform.translation.z |
变换
Sica | KeyPath |
---|---|
.transformRotationX |
transform.rotation.x |
.transformRotationY |
transform.rotation.y |
.transformRotationZ |
transform.rotation.z |
.transformScaleX |
transform.scale.x |
.transformScaleY |
transform.scale.y |
.transformScaleZ |
transform.scale.z |
.transformTranslationX |
transform.translation.x |
.transformTranslationY |
transform.translation.y |
.transformTranslationZ |
transform.translation.z |
许可证
Sica 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。