web-dev-qa-db-ja.com

UIProgressViewおよびカスタムの追跡と進行状況の画像(iOS 5プロパティ)

UIProgressViewに関するiOS 5の新しいプロパティをいくつか試しています。彼らです:

@property(nonatomic, retain) UIImage *progressImage;
@property(nonatomic, retain) UIImage *trackImage;

これらの新しいプロパティにより、「progress」と「track "画像。自分でロールすることなく、ファンシーなプログレスバーを作成できます。

ただし、Apple "stretches"の進行イメージを理解することはできません。これは、ドキュメントが少し不安定なためです=/OR私が知らない標準があります。とにかく、適切な進捗状況と画像の追跡方法を理解するのを手伝ってくれる人がいるかどうか尋ねます。

カスタムイメージをロードすると、どのサイズを試しても、次のような結果が得られます。

Progress Example

私の測定値は次のとおりです。

  • UIProgressViewの長さ:226ユニット
  • trackingImage.png:10px
  • progressImage.png:7px

最後に、ここに私のカスタム画像があります:

The Progress ImageprogressImage.png

The Tracking ImagetrackImage.png

30
Sean

これが起こっていることです:

UIProgressViewに提供する画像は、基本的にUIImageViewsに押し込まれ、UIImageViewは画像を拡大してスペースを埋めます。

単に行う場合:

[progressView setTrackImage:[UIImage imageNamed:@"track.png"]];

次に、10px幅の画像を引き伸ばして(たとえば)100px幅の画像ビューを埋めようとしているため、奇妙な結果が得られます。これは、(大まかに)画像内のすべてのピクセルが10回繰り返されることを意味します。したがって、画像のピクセルが次の場合:

0123456789

次に、その画像を100ピクセル幅の画像ビューに直接配置すると、次のように拡大されます。

000000000011111111112222222222333333333344444444445555555555...

これはあなたに起こっていることです。

あなたが本当に実現したいことはこれです:

01234567812345678123456781234567812345678...123456789

言い換えると、画像に1ポイント左端が引き伸ばされず、中央がタイル表示され、1ポイント右端にも引き伸ばされないようにする必要があります。これを行うには、 画像のサイズを変更できるようにする必要があります

UIImage *track = [[UIImage imageNamed:@"track"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 1, 0, 1)];
[progressView setTrackImage:track];

これを適切に垂直に並べて表示したい場合は、エッジインセットを{1, 1, 1, 1}にする必要があります(1ポイントの境界が必要であると想定)。

progressImageにも同じことを行うと、正しいように見えるものになります。

Correct progressView

tl; dr:

画像はサイズ変更可能である必要があります。

110
Dave DeLong