作者:mobiledu2502880253 | 来源:互联网 | 2023-01-16 19:34
如何解决《UIViewPropertyAnimator在iOS10和iOS11上反转动画的不同行为.`isReversed`和`fractionComplete`属性的错误?》经验,为你挑选了1个好方法。
问题
在iOS10和iOS11上运行相同的代码我的UIViewPropertyAnimator在更改其.isReversed
属性后就有了不同的行为.
在iOS10上一切都很好.动画问题发生在iOS11上
条件
对于任何动画都是如此,不仅对于特定的动画,它都可以通过观看动画和代码来验证.它发生在模拟器和真实设备上.
DETAILS
一旦用他的动画创建了一个UIViewPropertyAnimator,在它运行期间我只需调用.pauseAnimation()
并将.isReversed
属性更改为true.之后我恢复了动画调用:
continueAnimation(withTimingParameters parameters: UITimingCurveProvider?, durationFactor: CGFloat)
在iOS10的这一点上,动画平滑地改变了他的诗句,在iOS11上它立即停止并且以一点帧滞后反转.
如果在代码中我检查.fractionComplete
(在我的UIViewPropertyAnimator对象上调用它的值,让我回到完成动画的百分比值,从0.0开始,结束于1.0)之后.continueAnimation(...
- 在iOS 10上,它会保留一段时间,如果动画仍在继续,只有在一段时间后跳到他的补充.
- 在iOS 11上,它突然跳起来在他的补充
文件中有与此相关的非更新,只是UIViewPropertyAnimator的几个新属性但未使用,因为我的目标是iOS10
可能是一个错误或我错过了什么!?
小更新:刚刚测试过,iOS 11.0.1和iOS 11.1 beta1上的行为相同
在评论中链接,这只发生在非线性曲线上!
1> Kasper Munck..:
我已经打了很长一段时间了,但后来我注意到了iOS 11中scrubsLinearly
添加的属性UIViewPropertyAnimator
:
默认为true.使动画师能够线性地或使用动画师的当前时间暂停和擦洗.
请注意,此属性的默认值是true
,这似乎与使用非线性动画曲线发生冲突.这也可以解释为什么在使用线性定时功能时不存在该问题.
设置scrubsLinearly
为false
,动画师似乎按预期工作:
let animator = UIViewPropertyAnimator(duration: 0.25, curve: .easeOut) {
...
}
animator.scrubsLinearly = false