UIButtonをUIButtonTypeCustomで作成する際に単純にbackgroundColor = [UIColor whiteColor] なんかのボタンを作ってしまうとタップした際に影が表示されず、押している感がなくなる事が多いと思います。
他にも、UIButtonにsetImageした場合も同様ですね。
そのためにデザイナーさんに逐一影の画像をお願いするのも手間ですし、余計な画像が増えてしまうので私は以下のようなClassを作成して動的にHighlightedへ指定するようにしています。
objective-c
#define UICOLOR_RGBA(R,G,B,A) [UIColor colorWithRed:R/255.0f green:G/255.0f blue:B/255.0f alpha:A]
/**
* 指定したUIColorで生成したImageを返す
*/
+ (UIImage *)imageWithColor:(UIColor *)color
rect:(CGRect)rect
{
UIGraphicsBeginImageContext(rect.size);
[color setFill];
UIRectFill(rect);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
この関数を、適当なCommonClassに記述してどこからでも呼び出せるようにしています。
使い方は、例えば以下のような方法があります。
objective-c
[self.myButton setBackgroundImage:[CHZCommon imageWithColor:UICOLOR_RGBA(0, 0, 0, 0.3f) rect:self.myButton.bounds] forState:UIControlStateHighlighted];
こうすると、タップしたときにいい感じに影を乗せる事ができると思います。
この関数には他にも応用的な使い方がいくらでもありますので、どこかに定義しておくと便利に使えると思います。