resizableImageWithCapInsetsを使用する場合:UIButtonの画像を通常の状態(setBackgroundImage:forState: )が動作します。他のすべての状態では、描画されたイメージの代わりにギャップが表示されます。 UIButtonは、特定の状態にイメージが設定されていない場合、通常の状態のイメージは、無効な状態と選択された状態のオーバーレイと共に使用されることを示します。ここresizableImageWithCapInsetsを使用:ボタンの画像は状態セットでのみ機能し、他の状態は「ギャップ」を表示します
通常の状態である。
ここでは、選択された状態である。
そして、ここではソース画像である:
私は指定したサイズ変更可能なイメージを使用していますが、イメージはサイズ変更された領域を描画していません。 (左端と右端を見ることができますが、引き伸ばされる中央の領域は描画されません)。
興味深いことに、stretchableImageWithLeftCapWidth:topCapHeight:は動作します。今はこれがiOS 5で推奨されていないメソッドですが、新しいAPIにギャップが表示されているので、私はそれを使用しているかもしれません。
私は各州ごとにさらに多くのイメージを提供できると認識していますが、私が達成しようとしているメモリフットプリントを減らし、私が避けたいグラフィックデザイナーに余分な依存関係を加える目的を打ち破っています。
// This is the gist of the code being used
UIImage* image = [UIImage imageNamed:@"button.png"];
UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height/2, image.size.width/2, image.size.height/2, image.size.width/2);
image = [image resizableImageWithCapInsets:insets];
[self.button setBackgroundImage:image forState:UIControlStateNormal];
// Even doing the following results in the same behaviour
[self.button setBackgroundImage:image forState:UIControlStateSelected];
コードスニペットを追加し、スクリーンショットをホストしました(当然のことながら該当領域に切り取られました) – NSProgrammer
これは奇妙です...私は好きです可能ならばbutton.pngを見てください。 –
http://i40.tinypic.com/ea35zq.png - 私は新しいユーザーとして2つのリンクを投稿に追加することができますが、ここにはsourece button.png – NSProgrammer