ViewAnimator 是一个用于以简易方式构建复杂 iOS UIView 动画的库。它为任何视图(包括包含其他视图的视图,如带有单元格的 UITableView 和 UICollectionView 或带有 arrangedSubviews 的 UIStackView)提供单行代码动画。
SVG 动画灵感来源于 Luke Zhao's 项目 Hero
UI 由 Messaki 创建,请务必查看他的个人资料。
Logo 和横幅由 @cintia_ve 创建
ViewAnimator 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile
pod "ViewAnimator"
将 ViewAnimator/Classes 中的 swift 文件拖放到您的项目中。
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)
Direction
提供了动画应发生的轴及其移动方向。
let animation = AnimationType.from(direction: .top, offset: 30.0)
view.animate(animations: [animation])
支持放大和缩小动画。
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
协议为您提供了扩展 ViewAnimator
支持的动画的可能性,但 animateRandom
函数除外。
public protocol Animation {
var initialTransform: CGAffineTransform { get }
}
ViewAnimator 附带了一组方便的扩展,使您在 UITableView
和 UICollectionView
中的动画更加简单。它们都可以访问 section 中的 cells 以轻松进行动画处理。
它们都公开了一个方法 visibleCells(in section: Int)
,该方法返回一个 UITableViewCell
或 UICollectionViewCell
的数组。
let cells = tableView.visibleCells(in: 1)
UIView.animate(views: cells, animations: [rotateAnimation, fadeAnimation])
欢迎随时通过想法 💭、问题
如果您在您的应用中使用了 ViewAnimator,我很乐意听到并在这里展示您的动画!
Marcos Griselli | @marcosgriselli
ViewAnimator 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。