何时可以使用CALayer.timeOffset

时间:2017-07-29 11:37:12

标签: ios calayer caanimation

需要一些有关高级CALayer问题的帮助。

我有一个添加CAShapeLayer的UIView。图层暂停(速度= 0),并且附加了动画,我想手动控制。

与此处非常相似:Tweening / Interpolating between two CGPaths / UIBeziers - 除了我的视图是集合视图单元格。

一切都按预期工作,除了我不想从0位置开始。每个单元格可能从动画中的不同位置开始。

当集合视图询问我的视图时,我试图将layer.timeOffset配置为0.5而不是0.这不起作用,我尝试了每个View和Layer并委托我能找到的回调。

我找到的唯一解决方法是: dequeueReusableCellWithIdentifier而不是设置cellView.subLayer.timeOffset = 0.5;,我将更新发送到以后:

dispatch_after(main_queue, a bit later, ^{
  cellView.subLayer.timeOffset = 0.5
});

所以我的问题是,图层/动画的viewDidLoad相当于什么。何时在图层上调用timeOffset实际上有效?

有人有这个问题吗?

1 个答案:

答案 0 :(得分:2)

通过操纵动画初始timeOffset找到多个(可能是不正确的)解决方案。

最终我决定不依赖动画渲染初始状态。相反,我在动画之外设置正确的属性值,并且只在实际需要时添加动画,在用户交互期间添加动画,并在完成后删除动画。

这意味着需要更多代码,但至少它是正确的。层和媒体时序很棘手。我在其上找到的最好的文章在这里:

如果您需要这样做,我强烈建议您按照Apple的建议暂停和恢复该图层:

另外,值得指出的是,在修改任何可动画属性时使用CATransaction是至关重要的,有时在文档和示例中会被忽略。