Sica 可以按顺序或并行执行各种动画。
如果您正在使用 Carthage,只需将 Sica 添加到您的 Cartfile
中
github "cats-oss/Sica"
Sica 可通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile 中
pod 'Sica'
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)
您可以选择动画播放类型
您可以选择各种时间函数
Sica | 关键路径 |
---|---|
.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 (Z轴位置) |
Sica | 关键路径 |
---|---|
.anchorPointX |
anchorPoint.x (锚点 X) |
.anchorPointy |
anchorPoint.y (锚点 Y) |
Sica | 关键路径 |
---|---|
.boundsOrigin |
bounds.origin (边界原点) |
.boundsOriginX |
bounds.origin.x (边界原点 X) |
.boundsOriginY |
bounds.origin.y (边界原点 Y) |
.boundsSize |
bounds.size (边界尺寸) |
.boundsSizeWidth |
bounds.size.width (边界宽度) |
.boundsSizeHeight |
bounds.size.height (边界高度) |
Sica | 关键路径 |
---|---|
.contentsRectOrigin |
contentsRect.origin (内容矩形原点) |
.contentsRectOriginX |
contentsRect.origin.x (内容矩形原点 X) |
.contentsRectOriginY |
contentsRect.origin.y (内容矩形原点 Y) |
.contentsRectSize |
contentsRect.size (内容矩形尺寸) |
.contentsRectSizeWidth |
contentsRect.size.width (内容矩形宽度) |
.contentsRectSizeHeight |
contentsRect.size.height (内容矩形高度) |
Sica | 关键路径 |
---|---|
.frameOrigin |
frame.origin (框架原点) |
.frameOriginX |
frame.origin.x (框架原点 X) |
.frameOriginY |
frame.origin.y (框架原点 Y) |
.frameSize |
frame.size (框架尺寸) |
.frameSizeWidth |
frame.size.width (框架宽度) |
.frameSizeHeight |
frame.size.height (框架高度) |
Sica | 关键路径 |
---|---|
.positionX |
position.x (位置 X) |
.positionY |
position.y (位置 Y) |
Sica | 关键路径 |
---|---|
.shadowOffsetWidth |
shadowOffset.width (阴影偏移宽度) |
.shadowOffsetHeight |
shadowOffset.height (阴影偏移高度) |
Sica | 关键路径 |
---|---|
.sublayerTransformRotationX |
sublayerTransform.rotation.x (子图层绕 X 轴旋转) |
.sublayerTransformRotationY |
sublayerTransform.rotation.y (子图层绕 Y 轴旋转) |
.sublayerTransformRotationZ |
sublayerTransform.rotation.z (子图层绕 Z 轴旋转) |
.sublayerTransformScaleX |
sublayerTransform.scale.x (子图层 X 轴缩放) |
.sublayerTransformScaleY |
sublayerTransform.scale.y (子图层 Y 轴缩放) |
.sublayerTransformScaleZ |
sublayerTransform.scale.z (子图层 Z 轴缩放) |
.sublayerTransformTranslationX |
sublayerTransform.translation.x (子图层 X 轴平移) |
.sublayerTransformTranslationY |
sublayerTransform.translation.y (子图层 Y 轴平移) |
.sublayerTransformTranslationZ |
sublayerTransform.translation.z (子图层 Z 轴平移) |
Sica | 关键路径 |
---|---|
.transformRotationX |
transform.rotation.x (绕 X 轴旋转) |
.transformRotationY |
transform.rotation.y (绕 Y 轴旋转) |
.transformRotationZ |
transform.rotation.z (绕 Z 轴旋转) |
.transformScaleX |
transform.scale.x (X 轴缩放) |
.transformScaleY |
transform.scale.y (Y 轴缩放) |
.transformScaleZ |
transform.scale.z (Z 轴缩放) |
.transformTranslationX |
transform.translation.x (X 轴平移) |
.transformTranslationY |
transform.translation.y (Y 轴平移) |
.transformTranslationZ |
transform.translation.z (Z 轴平移) |
Sica 在 MIT 许可下可用。 有关更多信息,请参见LICENSE 文件。