2

画像があり、その画像で水平線と垂直線を繰り返したいので、画像を拡張します。

たとえば、50X50 の画像があり、行 x = 15 を繰り返して 50x70 にしたいのですが、これは iOS でも可能ですか?

編集:

わかりました、もっと明確にしようと思います。基本的には長方形で、幅60、高さ60の画像60x60があります。x = 40でピクセルを繰り返すことにより、その画像を80x60に伸ばしたいと思います。または、単純に描画するには、次のようにします。

  123456
1 XXXAXX
2 XXXAXX
3 XXXAXX
4 XXXAXX
5 XXXAXX
6 XXXAXX

そして私はそれが欲しい:

  12345678
1 XXXAAAXX
2 XXXAAAXX
3 XXXAAAXX
4 XXXAAAXX
5 XXXAAAXX
6 XXXAAAXX

40行目にある画像上のすべてのピクセルを繰り返します。そして、任意の数の画像でそれを実行したいと思います。

4

3 に答える 3

8

目的の結果を達成するための鍵はresizableImageWithCapInsets:にありUIImageます。たとえば、次の 50px x 50px の画像を見てください (注: これは @2x バージョンです)。

x 軸で 15 ピクセルだけオフセットされた 1 つのピクセルの垂直の赤い線を持つ Retina スケールの 50x50 画像

赤い線を水平に伸ばしたい場合は、最初UIEdgeInsetに赤い線の位置を表す を定義します。

UIEdgeInsets redLine = UIEdgeInsetsMake(0, 15, 0, 34);

これは、左から 15px だけオフセットした画像の 1 ピクセル幅のスライスを定義します。rightオフセットは、伸縮可能なスライスの34右端が 16px で、50 (画像の幅) から 16 を引いた値が 34 であるためです。

ができたUIEdgeInsetので、画像を読み込んで、伸縮可能なバージョンを作成できます。

UIImage *stretchableImage = [[UIImage imageNamed:@"my_image"] resizableImageWithCapInsets:redLine];

stretchableImageこれを、UIImageView必要なフレームで に割り当てることができます。

UIImageView *stretchedImageView = [[UIImageView alloc] initWithImage:stretchableImage];
stretchedImageView.frame = CGRectMake(100,100,70,50); // The image view is 70px wide

アプリでは、次のstretchedImageViewようになります。

ここに画像の説明を入力

画像スライスを引き伸ばすのではなく、並べて表示できるようにする別のメソッドがあるため、次の画像を取得するなどのクレイジーなことを行うことができresizableImageWithCapInsets:resizingMode:ます。

ここに画像の説明を入力

そして、次のように水平に並べて表示します。

ここに画像の説明を入力

于 2013-10-17T15:02:12.357 に答える
1

質問を正しく理解している場合は、次を使用する必要があります。

(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets

UIEdgeInsets は、各キャップ インセット (画像の上、左、下、右の領域) の float 値を指定する構造体です。これをボタンの画像に適用するには、次のことを行う必要があります。

UIImage *buttonImage = [[UIImage imageNamed:@"blueButton"]  
   resizableImageWithCapInsets:UIEdgeInsetsMake(0, 16, 0, 16)];

これは、元の画像の左右の 16 ピクセルが、上で定義されたボタン サイズのフレームに合わせて画像を引き伸ばすときに、スケーリングまたはサイズ変更されないように要求します。終わり

OBS: これはプレーンな画像でのみうまく機能します。たとえば、グラデーションのある画像はうまく機能しません。

詳しくはこちらをご覧ください。

于 2013-10-17T14:44:02.067 に答える