わかりました、皆さん、
あちこち検索しましたが、問題の解決策が見つからないようです。
ボタンの背景にかなりの画像を使用して、UIButton のカスタムの外観を取得し、アプリの全体的なサイズを縮小しようとしています。これは正しいことのように思われるからです。
ただし、ボタンに画像を設定しようとすると、ボタンがすべて奇妙に見え、角が通常の UIButton の標準の角の半径と一致しません。
いくつかの異なるサイズの画像を作成しようとしましたが、何もうまくいかないようです。
キャップが均一であることを知っており、それに加えて1ピクセルの中央を伸ばす必要があります。
私の UIButton の高さは 44 です。高さ 44 ピクセル、幅 21 ピクセルで、デフォルトのボタンと同じ丸みを帯びた角の半径を持つ画像を作成し (アスピリン カプレットが好きです)、背景画像を次のように設定するとします。
UIImage *btnImage = [UIImage imageNamed:@"buttontest1.png"];
UIImage *newImg = [btnImage stretchableImageWithLeftCapWidth:10 topCapHeight:0];
角が一致せず、奇妙に広く伸びて見え、ボタンの高さが伸びます!
StretchableImagewithLeftCapWidth が非推奨であることは知っていますが、 resizableCapWithInsets の使用は私にとってさらに意味がありません。それをしようとすると、ボタンの画像が何度も繰り返されるように見えます。
誰かが私が間違っていることを理解できますか? このがらくたを簡単に説明している場所はありますか?私はそれを得ることができないようです。
ありがとう!-TJ
編集 - resizableImageCapWithInserts を使用した後に画像を追加して結果を表示します。うまくいくと思われる例がいたるところにあるので、それらは典型的ではありませんが、例は私にとっては決してうまくいきません。ここに画像を追加する方法を見つけたので、これが役立つかもしれません。
幅 21 ピクセル、高さ 39 ピクセルの PNG ファイルを次に示します。
これは、次のコードを使用して背景画像を設定した結果です。
[self.button1 setBackgroundImage:[[UIImage imageNamed:@"buttontest4.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)] forState:UIControlStateNormal];
私が理解しているように、これは 21 ピクセル幅の画像の左 10 ピクセルと右 10 ピクセルをそのままコピーし、中央の 1 ピクセルを横に伸ばす必要があります。この奇妙な繰り返しを取得します。隣のBTNと同じサイズである必要があります。
これが私のXcodeレイアウトです:
どの画像を使用しても、同様の結果が得られます。
私は明らかにここで何かを怒らせているわけではありません。
これまでの回答に感謝します。少し霧が少なくなってきました。
TJ
EDIT2: 画像 21px x 44px で cap insets メソッドを使用したサンプルを表示します。
ストーリーボードでデザインした場合、4 つのボタンはすべて高さ 44px です。
ご覧のとおり、オレンジ色のボタンは両方とも、スケール比較のために白いボタンよりも大きくなっています。
上がボタン1、下がボタン2です。
UIImageResizingModeStretch のオプションの resizingMode パラメータを使用して、より近づける方法を見つけました。
ただし、ボタンが本来よりも大きいことに注意してください。
ボタン画像を設定するコードは次のとおりです。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.button1 setBackgroundImage:[[UIImage imageNamed:@"buttontest1a.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 10, 10)] forState:UIControlStateNormal];
[self.button2 setBackgroundImage:[[UIImage imageNamed:@"buttontest1a.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10) resizingMode:UIImageResizingModeStretch] forState:UIControlStateNormal];
}
(10,10,10,10) で上部の画像を実行すると、以前のように画像の上部を繰り返さない画像が得られます。一番上の画像はオプションのサイズ変更パラメーターを使用していないことを知っています。これは、それぞれが何を得るかを確認するためのテストであるためです。
さて、事態をさらに複雑にします。一番上のボタンのサイズを 43 に設定すると、画像よりも 1 ピクセル小さくなり、オプションのサイズ変更パラメーターを使用して呼び出しを行うと、ボタンのサイズが適切でないことを除けば、ほぼ完璧な結果が得られます。
ここで一体何が起こっているのですか?
私の厚い頭蓋骨を通して知識を叩き込もうとしているすべての人に感謝します. TJ