简单界面核心动画

Sica

Platform Language Carthage
Swift Package Manager Version License

Sica 可以按顺序或并行执行各种动画。

特性

要求

安装

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)

SequenceAnimation

并行动画

如果您设置 .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)

ParallelAnimation

永久动画

如果在调用 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)

Forever

取消

如果您想取消动画,应该调用 cancel

let animator = Animator(view: sampleView)
/*
Add animation and run
*/
animator.cancel() // Animation cancel

移除添加的动画

如果您调用 run 然后调用添加动画方法,则不会添加任何动画。 如果您再次使用 animator,请在 addBasicAnimationaddSpringAnimationaddTransitionAnimation 之前调用 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

扩展

您可以在 UIViewCALayer 中访问 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)

支持

动画

AnimationPlayType

您可以选择动画播放类型

EasingFunctions

您可以选择各种时间函数

EasingFunctions

关键路径表

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 文件