ALAnimatable 0.2

ALAnimatable 0.2

测试测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2016年7月
SPM支持 SPM

Albert Mata维护。




ALAnimatable

ALAnimatable 将一个 Animatable 协议添加到您的项目中,允许您使用单行代码一次性在视图中动画化所有子视图,前提是您使用 Auto Layout 创建了您的用户界面。

兼容性

ALAnimatable 需要 iOS 8+,并且与使用 Auto Layout 的 Swift 2 项目兼容。

安装

传统方法

只需将文件 Animatable.swift 拖入您的项目中即可。这就是您真正需要做的。

用法

animateSubviews 方法完整的签名包括除了必填的 direction 以外的更多选项

func animateSubviews(from direction: AnimatableDirection, destination: AnimatableDestination,
                          speed: AnimatableSpeed, origin: AnimatableOrigin,
                          bouncing: Bool, excluding: Set<UIView>,
                          uniform: AnimatableUniform)
  • direction: AnimatableDirection 可以是 RightLeftTopBottom,并设置子视图动画的起始位置。
  • destination: AnimatableDestination 可以是 In(默认选项)或 Out,表示所有子视图是否应动画进入视图或离开。
  • speed: AnimatableSpeed 可以是 QuickMedium(默认选项)或 Slow,并设置动画的持续时间。
  • origin: AnimatableOrigin 可以是 Close(默认选项)、FarReallyFar,指示在动画开始时视图放置得多远(或者如果是 Out 动画,则它们会走多远)。这会对子视图的移动产生一些影响,但不是很明显。
  • bouncing: Bool 显然可以是 true(默认选项)或 false,并设置子视图是否在动画结束时弹跳。
  • excluding: Set<UIView> 预期一个集合(因此您可以传递一个数组),包含所有您不希望动画化的视图的子视图。它的默认值是一个空集,因此所有子视图都会被动画化。
  • uniform: AnimatableUniform 可以是 SlightlyNearlyTotally(默认选项),允许子视图以不同的速度动画。

那么,它是如何工作的呢?

  1. 首先,你需要使用自动布局(在ALAnimatable中的AL前缀实际上表示自动布局,而不是Albert)来创建用户界面。你不需要设置任何特殊的约束、优先级或其他设置。只需忘记你将要动画化视图,并按常规设计你的界面。

  2. 其次,在你的代码中,你可以在包括所有其他内容的视图中调用那一行代码。这可能是主要的UIViewControllerview

  3. 没有其他内容。

从源代码的角度来看,ALAnimatable创建一个Animatable协议,并添加一个扩展,其中包含所有只能由UIView采用的功能。它还设置了另一个扩展来表明UIView实际上采用了Animatable。如果你不希望你的项目中的每个UIView都采用Animatable,你可以删除extension UIView: Animatable { }这一行,然后确保你自己的UIView子类采用了该协议。

可以使用哪些NSLayoutAttribute选项以便它们能够被动画化?

所有适用于水平或垂直约束的选项。这包括水平动画的CenterXCenterXWithinMarginsLeadingLeadingMarginLeftLeftMarginRightRightMarginTrailingTrailingMargin,以及垂直动画的BottomBottomMarginCenterYCenterYWithinMarginsTopTopMargin

它在与嵌套在视图、显示堆叠视图等情况中表现良好吗?

是的,它可以。如果你使用嵌套的堆叠视图,祝你好运,去清理所有来自Interface Builder的警告。

一些示例

示例 1

动画主UIViewControllerview中的所有子视图(除底部的按钮外)从右侧来

view.animateSubviews(from: .Right, excluding: [buttons])

Example 1

示例 2

动画主UIViewControllerview中的所有子视图(除底部的按钮外)从左侧来,缓慢地移出屏幕但移动得很远

view.animateSubviews(from: .Left, destination: .Out, speed: .Slow, origin: .Far, excluding: [buttons])

Example 2

示例 3

动画主UIViewControllerview中的所有子视图(除底部的按钮外)从顶部来,确实非常远(因此它们将突然出现)

view.animateSubviews(from: .Top, origin: .ReallyFar, excluding: [buttons])

Example 3

示例 4

动画主UIViewControllerview中的所有子视图(除底部的按钮外)从底部来,不带有最后的弹跳动作

view.animateSubviews(from: .Bottom, bouncing: false, excluding: [buttons])

Example 4

示例 5

动画主UIViewControllerview中的所有子视图(除底部的按钮外)从右侧来,并设置uniform以使每个子视图以不同的速度动画化

view.animateSubviews(from: .Right, excluding: [buttons], uniform: .Slightly)

Example 5

一些需要注意的考虑因素

  • 如预期,为了保证ALAnimatable可靠地工作,自动布局系统必须是有效的。

  • excluding参数允许您设置某些子视图,只要它们是通过涉及主视图或其他也排除在动画过程之外的子视图的限制放置的,就无需进行动画处理。如果您在excluding中传递了一个子视图,但其位置是由将参与到动画过程中的其他子视图涉及的限制设置的,则该子视图也会被动画处理。

作者

Albert Mata

许可

ALAnimatable使用MIT许可。如果您有任何问题,或者想要分享您如何使用这个工具,请提交一个问题。