CocoaPods Carthage Codebeat License

ViewAnimator 是一个用于以简易方式构建复杂 iOS UIView 动画的库。它为任何视图(包括包含其他视图的视图,如带有单元格的 UITableView 和 UICollectionView 或带有 arrangedSubviews 的 UIStackView)提供单行代码动画。

整个视图         UITableView                                  UICollectionView

                   

SVG 动画灵感来源于 Luke Zhao's 项目 Hero

复杂布局

UI 由 Messaki 创建,请务必查看他的个人资料。

Logo 和横幅由 @cintia_ve 创建

安装

CocoaPods

ViewAnimator 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile

pod "ViewAnimator"

手动

ViewAnimator/Classes 中的 swift 文件拖放到您的项目中。

Carthage

github "marcosgriselli/ViewAnimator"

用法

ViewAnimator 提供了一组 UIView 扩展,可以轻松地为您的视图添加自定义动画。从 2.0.0 版本开始,有两种方式可以使用此扩展。

自驱动动画视图

视图可以通过调用 .animate(animations: [Animation]) 来自行动画,这是最基本用法。以下是包含许多默认参数的完整方法

func animate(animations: [Animation],
             reversed: Bool = false,
             initialAlpha: CGFloat = 0.0,
             finalAlpha: CGFloat = 1.0,
             delay: Double = 0,
             duration: TimeInterval = ViewAnimatorConfig.duration,
             usingSpringWithDamping dampingRatio: CGFloat = ViewAnimatorConfig.springDampingRatio,
             initialSpringVelocity velocity: CGFloat = ViewAnimatorConfig.initialSpringVelocity,
             completion: (() -> Void)? = nil)

动画多个视图

ViewAnimator 遵循 UIKit 动画 API 风格,提供了一个静态方法 UIView.animate(views: [UIView], animations: [Animation])。这使得该库非常易于使用,并且可以扩展到任何类型的视图。与之前的示例一样,该方法包含许多默认参数

static func animate(views: [UIView],
                    animations: [Animation],
                    reversed: Bool = false,
                    initialAlpha: CGFloat = 0.0,
                    finalAlpha: CGFloat = 1.0,
                    delay: Double = 0,
                    animationInterval: TimeInterval = 0.05,
                    duration: TimeInterval = ViewAnimatorConfig.duration,
                    usingSpringWithDamping dampingRatio: CGFloat = ViewAnimatorConfig.springDampingRatio,
                    initialSpringVelocity velocity: CGFloat = ViewAnimatorConfig.initialSpringVelocity,
                    completion: (() -> Void)? = nil)

AnimationType

Direction(方向)

Direction 提供了动画应发生的轴及其移动方向。

let animation = AnimationType.from(direction: .top, offset: 30.0)
view.animate(animations: [animation])

Zoom(缩放)

支持放大和缩小动画。

let animation = AnimationType.zoom(scale: 0.5)
view.animate(animations: [animation])

组合动画

您可以组合符合 Animation 协议的动画,以在动画块上应用多个变换。

let fromAnimation = AnimationType.from(direction: .right, offset: 30.0)
let zoomAnimation = AnimationType.zoom(scale: 0.2)
let rotateAnimation = AnimationType.rotate(angle: CGFloat.pi/6)
UIView.animate(views: collectionView.visibleCells,
               animations: [zoomAnimation, rotateAnimation],
               duration: 0.5)
UIView.animate(views: tableView.visibleCells,
               animations: [fromAnimation, zoomAnimation], 
               delay: 0.5)

Animation(动画)

Animation 协议为您提供了扩展 ViewAnimator 支持的动画的可能性,但 animateRandom 函数除外。

public protocol Animation {
    var initialTransform: CGAffineTransform { get }
}

UITableView/UICollection 扩展

ViewAnimator 附带了一组方便的扩展,使您在 UITableViewUICollectionView 中的动画更加简单。它们都可以访问 section 中的 cells 以轻松进行动画处理。

它们都公开了一个方法 visibleCells(in section: Int),该方法返回一个 UITableViewCellUICollectionViewCell 的数组。

let cells = tableView.visibleCells(in: 1)
UIView.animate(views: cells, animations: [rotateAnimation, fadeAnimation])

提及

项目详情

要求

贡献

欢迎随时通过想法 💭、问题⁉️和/或 pull requests 🔃 进行协作。

如果您在您的应用中使用了 ViewAnimator,我很乐意听到并在这里展示您的动画!

贡献者

作者

Marcos Griselli | @marcosgriselli

Twitter Follow

Twitter Follow

许可证

ViewAnimator 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。