いくつかのアニメーション化されたサブレイヤーを含む CALayer 階層があります。アニメーションは常にアタッチされていますが、(ルート レイヤーの速度を設定することによって) いつでも一時停止できるため、ユーザーはアニメーションをスクラブできます。
また、レイヤーをズームできるピンチ ジェスチャも添付されています。これは通常、完全に機能します。ただし、(drawInContext: を介して) 手動で描画された CALayer は、ズームするとピクセル化されます。
ジェスチャの最後に、これらのレイヤーのコンテンツ スケールを正しく更新するようにします。
[CATransaction begin];
[CATransaction setDisableActions:YES];
...
if (recognizer.state == UIGestureRecognizerStateEnded) {
for (CALayer *layer in _layers) {
layer.contentsScale = _scale;
}
}
[CATransaction commit];
ただし、これはアニメーションが次のフレームに移動するまで効果がありません(ユーザーがアニメーションをスクラブします)。
問題は、アニメーションのプレゼンテーションレイヤーが再描画されていないことです。contentScale を変更しようとしましたが、プロパティはプレゼンテーション レイヤーで読み取り専用です。
興味深いことに、階層内の CAShapeLayers はすべて完全に再レンダリングされています。
一時停止したアニメーションを強制的に再描画するにはどうすればよいですか?