2

次のコードで UIImage を引き伸ばそうとしています:

UIImage *stretchyImage = [[UIImage imageNamed:@"Tag@2x.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
UIImageView *newTag = [[UIImageView alloc] initWithImage:stretchyImage];

伸ばす前の画像はこんな感じ。

ここに画像の説明を入力

その後、次のようになります。

ここに画像の説明を入力

ストレッチがうまくいかないのはなぜ?コーナーはすべてピクセル化され、引き伸ばされているように見えますが、実際には中央だけを引き伸ばす必要があります。参考までに、私はこのアプリを iOS 6 で実行しています。

4

1 に答える 1

3

実装が機能しないのは、 stretchableImageWithLeftCapWidth:topCapHeight:メソッドに与える値が原因です。

まず、stretchableImageWithLeftCapWidth:topCapHeight:は iOS 6 で廃止されました。新しい API は resizableImageWithCapInsets:

画像の上下左右に伸縮できない部分があります。あなたがAPIに伝えたのは、「左側から-10を取得し、残りを私が指定したサイズに合わせて伸ばす」ということでした。

右側に再現性のないカスタム形状があるため、高さ幅の両方で、その部分を全体として使用する必要があります。

したがって、トップ キャップの幅は画像の高さ (右側にあるものの形状を保持するため) である必要があり、左キャップの幅は ~20 ピクセル (角の丸い四角形) である必要があり、ボトム キャップは 0 にすることができます。 cap は画像全体の高さです。最後に、右側の cap は右側のカスタム オレンジ色の形状の幅になります (これは ~40 ピクセルと見なされます)。

キャップ値をいじって、より良い結果を得ることができます。

UIImage *image = [UIImage imageNamed:@"Tag"];
UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(image.size.height, 20, 0, 40)];

トリックを行う必要があります。また、ファイル拡張子 & @2x を取り除くと、-imageNamed は正常に機能します。

于 2012-12-12T20:55:50.007 に答える