我有一个包含许多动画子层的 CALayer 层次结构。动画总是附加的,但是它们可以随时暂停(通过设置根层的速度),以便用户可以浏览动画。
我还附加了一个捏合手势,可让我放大图层。这通常工作得很好。但是,手动绘制的 CALayers(通过 drawInContext:)在缩放时会变得像素化。
在手势结束时,我确保正确更新这些图层的内容比例:
[CATransaction begin];
[CATransaction setDisableActions:YES];
...
if (recognizer.state == UIGestureRecognizerStateEnded) {
for (CALayer *layer in _layers) {
layer.contentsScale = _scale;
}
}
[CATransaction commit];
但是,直到动画移动到下一帧(用户在动画中滑动),这才会生效。
那么,问题是动画的表示层没有被重绘。我试图改变它们的contentsScale,但该属性在表示层上是只读的。
奇怪的是,层次结构中的 CAShapeLayers 都被完美地重新渲染了。
如何强制重绘暂停的动画?