Sica 0.4.1

Sica 0.4.1

rinovYusuke Morishitafunzinmarty-suzukimarty-suzukifunzin维护。



Sica 0.4.1

  • 作者:
  • funzin

简单界面核心动画

Sica

Platform Language Carthage
Swift Package Manager Version License

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)

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)

支持

动画

  • CABasicAnimation
  • CATransition
  • CASpringAnimation

AnimationPlayType

你可以选择动画播放类型

  • 依次运行动画
  • 并行运行动画

EasingFunctions

你可以选择各种计时函数

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