2

私は自分のiPhoneアプリでいくつかのアニメーションを見ていましたが、それはちょっと醜いように感じました。そして、私はそれを理解しました:それはサブピクセル状態を介してアニメーション化されないだけです。

したがって、通常の+ beginAnimations / + commitAnimationsを使用する場合、いくつかのものを移動すると、ほんの数ピクセルが「ジャンピー」に見えます。どうすればそれを回避できますか?フロート座標などでアニメーション化するためのフラグはありますか?

私が持っているものと私が探しているもののアイデアをあなたに与えるために、写真を参照してください:

代替テキストhttp://www.ptoing.net/subpixel_aa.gif

よろしくお願いします、アントン

4

3 に答える 3

7

面白いですが、UIImageViewはアンチエイリアシングを使用してコンテンツをアニメーション化しますが、ビューのエッジはアンチエイリアシングされていません (ハード)。UIView 自体は同じ境界を維持する必要があるためと思われますが、サブピクセル レンダリングは境界に少し追加される可能性があります。

それで、写真の周りに透明なスペースのある画像を配置するだけで、すべてスムーズに進みました。

UIView にコンテンツをカットさせないでください:)

于 2009-10-15T08:26:55.607 に答える
1

drawRectメソッドをオーバーライドし、アンチエイリアシングを設定してから、親がそれに描画できるようにするカスタム UIView から、アニメートしているアイテムを派生させることができます。次のようなもの:

- (void) drawRect:(CGRect)area
{
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSaveGState(context);
  CGContextSetShouldAntialias(context, true);
  CGContextSetAllowsAntialiasing(context, true);
  [super drawRect:area];
  // We have to turn it back off since it's not saved in graphic state.
  CGContextSetAllowsAntialiasing(context, false);
  CGContextRestoreGState(context);
}

一方、ここに到達するまでにレンダリング パイプラインが遅すぎる可能性があるため、最終的には、ピクセルの配置を完全に制御できる独自のアニメーション スキームを展開する必要がある場合があります。

于 2009-10-14T19:44:31.970 に答える
0

上記の Jeeva のコメントによると、info.plist の次のオプションを YES に設定することで、アンチエイリアシングを使用して UIView エッジをレンダリングできます。

Renders with edge antialiasing

Jeevaが指摘したリンクは次のとおりです。

http://www.techpaa.com/2012/06/avoiding-view-edge-antialiasing.html

于 2013-04-02T19:12:08.433 に答える