0

最終的なサイズで円が描かれたCALayerがあります。円を1%のスケールで開始し、100%で終了するようにアニメートしたいと思います。現在、スケーリング中にエッジがちらつくため、アニメーションはあまりスムーズではありません。最終的なサイズでは、円は正しく見えます。アニメーション自体の間にアンチエイリアシングを行う方法があるかどうか疑問に思っています。

CATransform3D fromTransform = CATransform3DMakeScale(0.01, 0.01, 1.0);
CATransform3D toTransform = CATransform3DMakeScale(1.0, 1.0, 1.0);

CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
theAnimation.duration = 1.5;
theAnimation.fromValue = [NSValue valueWithCATransform3D:fromTransform];
theAnimation.toValue = [NSValue valueWithCATransform3D:toTransform]; 

[myLayer addAnimation:theAnimation forKey:@"animateScale"];
4

2 に答える 2

2

レイヤーのスケーリング方法を変更する方法はないと思います。ただし、複数の解像度で円をさまざまなサイズのレイヤーにレンダリングし、それらを同時にアニメーション化することで、より良い結果が得られる場合があります。最終的なフルサイズのレイヤーに到達するまで、徐々に大きなレイヤーを拡大縮小およびフェードアウトします。

レイヤーサイズをアニメーション化する代わりに、フレームごとに円を直接描画することもできます。描画が十分に速い場合は、適切なフレームレートを維持し、スケーリングのアーティファクトはまったくありません。このパスを選択する場合は、通常、メインスレッドを使用するのではなく、このアニメーション専用の別のスレッドでこれを行うのが最適です。

同様の状況では、通常、描画のエッジを柔らかくするだけです。適切に選択されたシャドウまたはブルームは、エイリアシングアーティファクトを減らすのに不思議であり、他のどのソリューションよりもはるかに簡単です。(円のストローク幅はレイヤーに比例することにも注意してください。フルサイズで1ピクセルの線幅を使用して黒い背景に白い円を描くと、1%で線の幅はわずか0.01ピクセルになります!)

于 2010-07-24T18:44:47.887 に答える
0

方法:使用layer.shouldRasterize

  1. 4方向すべてで1ピクセル大きいsuperlayer/を作成しますsuperview
  2. superlayer/で変換を行いますsuperview
  3. layer.shouldRasterizeオリジナルで有効にするlayer/view

方法:に描画するUIImage

  • コンテンツをUIImageに描画します
  • コンテンツの周囲に1ピクセルの透明な境界線があることを確認してください
  • 画像を表示する

参照:http ://darknoon.com/2012/05/18/the-transparent-border-trick/

于 2014-08-20T16:15:25.040 に答える