0

いくつかのアニメーション化されたサブレイヤーを含む CALayer 階層があります。アニメーションは常にアタッチされていますが、(ルート レイヤーの速度を設定することによって) いつでも一時停止できるため、ユーザーはアニメーションをスクラブできます。

また、レイヤーをズームできるピンチ ジェスチャも添付されています。これは通常、完全に機能します。ただし、(drawInContext: を介して) 手動で描画された CALayer は、ズームするとピクセル化されます。

ジェスチャの最後に、これらのレイヤーのコンテンツ スケールを正しく更新するようにします。

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

...

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

[CATransaction commit];

ただし、これはアニメーションが次のフレームに移動するまで効果がありません(ユーザーがアニメーションをスクラブします)。

問題は、アニメーションのプレゼンテーションレイヤーが再描画されていないことです。contentScale を変更しようとしましたが、プロパティはプレゼンテーション レイヤーで読み取り専用です。

興味深いことに、階層内の CAShapeLayers はすべて完全に再レンダリングされています。

一時停止したアニメーションを強制的に再描画するにはどうすればよいですか?

4

1 に答える 1