需要一些有关高级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实际上有效?
有人有这个问题吗?
答案 0 :(得分:2)
通过操纵动画初始timeOffset找到多个(可能是不正确的)解决方案。
最终我决定不依赖动画渲染初始状态。相反,我在动画之外设置正确的属性值,并且只在实际需要时添加动画,在用户交互期间添加动画,并在完成后删除动画。
这意味着需要更多代码,但至少它是正确的。层和媒体时序很棘手。我在其上找到的最好的文章在这里:
如果您需要这样做,我强烈建议您按照Apple的建议暂停和恢复该图层:
另外,值得指出的是,在修改任何可动画属性时使用CATransaction是至关重要的,有时在文档和示例中会被忽略。