我正在尝试实现手势驱动程序交互式动画,其中使用NSLayoutConstraints
执行布局更改。使用UIView.animate(withDuration:)
时动画效果很好,但它不是百分比驱动的。
private func configureRight() {
UIView.animate(withDuration: 1.0) {
NSLayoutConstraint.activate(self.constraints2)
NSLayoutConstraint.deactivate(self.constraints1)
self.layoutIfNeeded()
}
}
当您只是更改已安装的约束时,它很简单。如果起始值为50,结束值为100,并且您希望将动画设置为50%,则在动画块中将值更改为75非常简单。但enabled
和disabled
之间没有中间位置。
我尝试使用CABasicAnimation
,但似乎无法使用CABasicAnimation
激活/停用布局约束。有没有办法访问UIView.animate(withDuration:)
创建的动画,以手动修改动画进度?
答案 0 :(得分:3)
是的,您可以深入了解UIView动画创建和操作它们的基础动画,但它非常痛苦。
我在Github上有一个名为KeyframeViewAnimations的项目(在Objective-C中),它创建了一个基于UIView和基于CAAnimation的关键帧动画版本,并展示了如何暂停,恢复和擦洗它来回走动。该存储库中还有一个自述文件 " Sleuthing UIView Animations"这解释了如何找出系统响应UIView动画生成的CAAnimations。
我花了很长时间才把这些东西拿出来,而且我有一段时间没看过它,所以我不记得那些血腥的细节。就像我说的那样,它变得复杂了。
您可能希望改为使用iOS 10中添加的新UIViewPropertyAnimator
类。
我在github上有一个名为UIViewPropertyAnimator-test的项目,演示了如何使用这个新类。尽管擦洗动画不能保留自定义时序曲线,但它使来回擦洗动画变得更加容易。