ViewAnimator 是一个库,可以轻松构建复杂的 iOS UIView 动画。它为任何视图提供了一行动画,包括包含其他视图的视图,如 UITableView 和 UICollectionView 以及其单元格或 UIStackView 及其 arrangedSubviews。
完整视图 UITableView UICollectionView
受 Luke Zhao 的项目 Hero 启发的 SVG 动画
复杂布局
由 Messaki 创建的 UI,请务必查看他的个人资料。
标志和横幅由 @cintia_ve 创建
安装
CocoaPods
ViewAnimator 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中。
pod "ViewAnimator"
手动
将 swift 文件放入您的项目中 ViewAnimator/Classes 目录。
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(视图: [UIView], 动画: [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])
Combined Animations
您可以组合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提供了一套实用的扩展功能,使您在UITableView
和UICollectionView
中的动画变得更加简单。它们都可以轻松访问要动画化的分区中的单元格。
它们都提供了一个名为visibleCells(in section: Int)
的方法,该方法返回一个包含UITableViewCell
或UICollectionViewCell
的数组。
let cells = tableView.visibleCells(in: 1)
UIView.animate(views: cells, animations: [rotateAnimation, fadeAnimation])
提及
项目详情
需求
- Swift 4.0
- Xcode 7.0+
- iOS 8.0+
贡献
欢迎提出建议合作
如果您在您的应用中使用ViewAnimator,我很乐意了解,并在此处展示您的动画!
贡献者
作者
马克斯·格里塞利 | @marcosgriselli
许可协议
ViewAnimator 可在 MIT 许可协议下使用。有关更多信息,请参阅 LICENSE 文件。