7

IB を使用して PNG 画像をビューに配置したり、これらの画像をビューのさまざまな位置にアニメーション化したりすると、画像がわずかにぼやけることがあります。

ほとんどの場合、画像の位置に 0.5 ピクセルを追加することで、ぼかしを修正できます。

[lbLiteButton.layer setPosition:CGPointMake(140.5,159.5)];

上記のように x と y の両方を調整する必要がある場合があります。xまたはyを調整するだけでよい場合もあります。

これは画像のサイズとコア アニメーションの仕組み、およびハーフ ピクセルと関係があるとどこかで読んだことを覚えていますが、どこにも記事が見つかりません!?

「.5 ピクセル」ソリューションの問題は、サイズに応じて PNG 画像ごとに異なるため、異なる画像ごとにカスタマイズする必要があるため、カスタム アニメーションを再利用できないことです。

  1. 画像をどこに配置したりアニメートしたりしても、位置がぼやけないようにする方法はありますか?
  2. 誰もこれに関する情報を持っていますか?

ありがとう!

4

3 に答える 3

14

ビューのレイヤーのpositionプロパティは、そのプロパティに基づいていanchorPointます。デフォルトでは (0.5, 0.5) で、レイヤーのアンカー ポイントがその中心にあることを意味します。ビュー (およびそのレイヤー) の幅または高さが奇数のピクセルである場合、位置に整数値を設定すると、ビューの原点が非整数になり、表示がぼやけてしまいます。

これを回避するには、ビューの目的の中心位置を取得し、ビューの幅の半分を減算し、その値を丸め、ビューの幅の半分を追加し、高さについて繰り返すことにより、位置の整数バージョンを把握できます。anchorPointビューのレイヤーを (0,0) に設定し、原点に基づいてビューを配置することもできます。

これは、スーパービューのずれにも関連している可能性があります。これを診断するには、Instruments で Core Animation インストゥルメントを使用し、Color Misaligned Images オプションを選択します。アプリケーションでピクセル整列されていないビューまたはレイヤーに色を付ける必要があります。

于 2010-01-31T02:16:56.610 に答える
2

ラベル内のぼやけたテキストで同様の経験がありました。これは、サブピクセル オフセットを持つラベルのスーパービューが原因でした。したがって、そのビュー内の位置は不可欠でしたが、親の座標に調整すると、半分のピクセルほどオフセットされ、ぼやけが発生しました。

ただし、これが時々しか発生しない場合は、そうではない可能性があります。スーパービューが動き回っていませんか、それとも変な位置に配置されていませんか? 最善の方法は、これが起こっている正確な状況を把握することだと思います。

于 2010-01-31T02:05:38.080 に答える
1

IBにはバグがあり、要素を移動するだけでぼやけてしまうことがあります。UILabelsとUIImageViewsで最もよく見られます(おそらくそれが最も明白なことですが)。何らかの形で上記のポイントに関係していると確信していますが、多くの場合、要素の位置(x、y)座標を0,0に設定してから、元の値に戻すことが修正されます。これで通常問題は解決します(これもIBにあります)。

于 2010-01-31T04:16:51.763 に答える