$yanutetsu->{blog}

プログラマ三大美徳なPM

UIButtonに設置した画像より大きい範囲でタッチのイベントをとる

UIButtonに画像を設置して「あれ?デザイン的にはこの大きさがいいんだけど、小さくてタップしづらいなー」って事ありますよね?

そこで、んじゃUIButton.frameを大きくしてると、画像も大きくなっちゃう

あれれ?

そうか!

UIButton.frameを大きくして、更にUIButton.boundsを画像と同じ大きさにしてみる。 これでどうだ!

やっぱりダメ...onz

買ってきた書籍見ても setBackgroundImage:forState:使っているし、、、公式ドキュメントを見ても、、、!?

setBackgoundImage:forState:の下にsetImage:forState:メソッドがある!?これじゃね?

お!いい感じ♪

画像よりも大きいframeのサイズでタップを認識するようになりました。 もしかしたらsetBackgroundImage:forState:で画像をセットすると、backgroundなので、frameやboundsをいくら調整してもその最大値にリサイズされてしまうのだろう。setImage:forState:にすることでUIButtonの領域の中に画像が設置されるみたい。よく考えてみると当たり前な気がする。 問題はsetBackgroundImage:forState:とsetImage:forState:があるということを知らなかったことかな?

setImage:forState:で画像を設置して更にsetText:forState:なんかで文字も登録するとframeで指定した範囲内に画像とテキストを並べて表示する。だから画像の上にテキストを表示させるときにsetBackgroundImage:forState:を利用するのが正しいメソッドの選択の仕方なのかもしれない。