0

我有一个包含许多动画子层的 CALayer 层次结构。动画总是附加的,但是它们可以随时暂停(通过设置根层的速度),以便用户可以浏览动画。

我还附加了一个捏合手势,可让我放大图层。这通常工作得很好。但是,手动绘制的 CALayers(通过 drawInContext:)在缩放时会变得像素化。

在手势结束时,我确保正确更新这些图层的内容比例:

[CATransaction begin];
[CATransaction setDisableActions:YES];

...

if (recognizer.state == UIGestureRecognizerStateEnded) {
    for (CALayer *layer in _layers) {
        layer.contentsScale = _scale;
    }
}

[CATransaction commit];

但是,直到动画移动到下一帧(用户在动画中滑动),这才会生效。

那么,问题是动画的表示层没有被重绘。我试图改变它们的contentsScale,但该属性在表示层上是只读的。

奇怪的是,层次结构中的 CAShapeLayers 都被完美地重新渲染了。

如何强制重绘暂停的动画?

4

1 回答 1

0

在我看来,强制重绘暂停动画的表示层是不可能的。

但是,我通过删除图层并在用户结束缩放手势时重新创建它们来解决这些问题。

于 2013-10-05T18:18:37.217 回答