扩展UIViewPropertyAnimator?

时间:2017-10-24 22:45:32

标签: ios swift animation uiview uiviewpropertyanimator

UIViewPropertyAnimator非常便于修改视图的变换,alpha等。但是,有时您希望动画CAShapeLayer路径或UIImageView图像更改。有没有办法扩展UIViewPropertyAnimator的功能以支持其他属性?如果没有,我怎么能将单独的动画与复杂的关键帧动画同步?

3 个答案:

答案 0 :(得分:2)

我想添加对该主题的引用。如果需要自定义属性。 如果完全了解正在发生的事情,此问题将为您提供帮助。 How can I animate a UIColor in a CALayer?

如果知道了,就可以实现

fractionComplete:CGFloat非常容易。

但是首先,您必须了解动画/动作/代理如何进行。所有的答案都在那里,但需要时间来理解。

处理所有情况是一个漫长的故事。就像您说的那样,这非常方便,但留给勤奋的家伙。

答案 1 :(得分:0)

您可以根据需要扩展任何课程,但要达到的能力并不容易。由于CALayer不是UIView,并且UIViewAnimation...不能在它们上工作(PS:Apple最近添加了对cornerRadius和其他某些图层属性的某种支持,但不是全部)

需要动画知识,才能更多地了解帧,关键帧和时间轴等动画逻辑。一旦学到足够的知识,就可以自己制作复杂的关键帧动画。

-提示:石英

有一些工具可以通过其GUI QuartzCode来简化动画制作。当出现超级复杂的动画时,我个人使用它:

QuartzCode

但不适用于像这样的简单关键帧动画:

QuartzCode2

希望有帮助。

答案 2 :(得分:-1)

UIViewPropertyAnimator易于使用。但是,这种简单性具有严重的局限性。根据{{​​3}},它只能直接用于为视图设置动画。这不包括CAShapeLayer的属性。

那么,您可以使用UIViewPropertyAnimator制作什么动画?此列表中的所有内容:

  • 框架
  • 界线
  • 中心
  • 转换
  • alpha
  • backgroundColor
  • contentStretch

如果要设置CAShapeLayer的动画,则必须改用CoreAnimation。尽管使用起来更复杂,但幸运的是,它还允许您组合动画。

例如,如果要同时运行两个动画,则可以使用CAAnimationGroup,如下所示:

let fadeOut = CABasicAnimation(keyPath: "opacity")
fadeOut.fromValue = 1
fadeOut.toValue = 0
fadeOut.duration = 1

let expandScale = CABasicAnimation()
expandScale.keyPath = "transform"
expandScale.valueFunction = CAValueFunction(name: kCAValueFunctionScale)
expandScale.fromValue = [1, 1, 1]
expandScale.toValue = [3, 3, 3]

let fadeAndScale = CAAnimationGroup()
fadeAndScale.animations = [fadeOut, expandScale]
fadeAndScale.duration = 1

您还可以检测动画何时结束,并使用它来开始另一个动画。有两种方法可以做到这一点:

可以设置动画的列表比UIViewPropertyAnimator的列表长得多。您可以找到它CAAnimationDelegate