べるべる研究日誌

なんでもやる系エンジニアの日々

UIImage + Clickable = UIButton

サムネイルを押すと拡大表示みたいなのを作って見ているのだけど、UIImageではStoryboardでにゅるーっと線を伸ばしてイベントをとれないので、どうしようか悩む。できるだけStoryboardを使いたい。

上位のUIViewをtagを使う

Storybordは諦めてまずはUIViewのタッチイベントで取得する方法もあるらしい

http://www.moonmile.net/blog/archives/2969

画像にタグをつけておいて、touchedBegainで取得。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
	UITouch *touch = [[event allTouches] anyObject];
	NSLog(@"TAG = %d",touch.view.tag);
...
}

この方法だとTouchDownで反応してしまい、Touch Upで反応するiOS的なイベントと少し変わってしまうので、やや気持ち悪いので、やはりUIButtonを使う方向で考える。

UIButtonに画像を貼り付ける

そうだよ、画像貼り付けできるんだよ。UIButtonをCustomで使ってこれに画像を張り付ければ完成(汗。

	button.imageView.contentMode = UIViewContentModeScaleAspectFit;
	[button setImage:[UIImage imageNamed:@"10_1957.jpg"] forState:UIControlStateNormal];

これでいいや...と思ったらクリックした時のHIghlightイメージにcontentModeが適用されず、画像がScaleFillで描画されるためビヨビヨ伸びる...。ここで一旦諦めて後回しに。

んで、ドキュメント見ながら考える....ピコーン(閃いた)

	button.imageView.contentMode = UIViewContentModeScaleAspectFit;
	[button setImage:[UIImage imageNamed:@"10_1957.jpg"] forState:UIControlStateNormal];
	button.adjustsImageWhenHighlighted = NO;

として、ハイライト時のイメージ描画をオフにすればOK。「絶対方法はあるハズ」とあきらめないのがiOSの開発のコツかもしれない...。

あれれ

でも、テスト用アプリではうまくいったのに作っているアプリでは画像が小さく表示されてしまって使えない...。UIImageViewに貼り付けるとうまく拡大されるのに、UIButtonに貼り付けつと最小サイズ...。

ということで、しばらくUIButtonを上に乗せる方向で行こうと思ってます。しくしく。