レイヤー プロパティにサブレイヤーとして追加されUIView
たサブクラスのインスタンスがいくつかあります。CAShapeLayer
これらの各レイヤーの変更をアニメーション化してUIBezierPath
います。これは見栄えがよく、パフォーマンスも優れていますが、Instruments のアクティビティ モニターでプロセスを実行すると、プロセスの CPU が最大 90% に達します。backboardd
ここで何が起こっているかについての詳細情報を入手するにはどうすればよいですか? backboardd
GPUでのCore Graphics / Core Animationの舞台裏のレンダリングですよね?Instruments でさらにデバッグするためのサポートはありますか? 負荷を減らすためにGCDで何か凝ったことをすることはできbackboardd
ますか?
編集:これを Apple の TSI にエスカレートした後、彼らはこれがこの数のアニメートされた CAShapeLayers の「予期される動作」であることを確認しました。はぁ。彼らはこのリンクで提案を提供しました.これには、アニメーションを継続的に一時停止および一時停止解除して、より低いフレームレートを模倣することが含まれます. (これは、DisplayLink でロックされた各アニメーション フレームの計算であるためbackboardd
)
-(void)pauseLayer:(CALayer*)layer {
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(void)resumeLayer:(CALayer*)layer {
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}
最後に、素晴らしい Apple の技術者は、アニメーションのフレームレート制御は「余談ですが、適切な API 拡張要求を行うだろう」と指摘しました。:)