「UIButtonの背景色を簡単設定」をRetina対応に

いきなりiOSプログラミングの話です。

ボタンオブジェクトであるところのUIButtonですが、文字の背景に色を付けようとして
btn.backgroundColor = [UIColor blueColor];
とかすると切ないことになります。(みんなもやってみよう!)

いろいろやり方はあるみたいですが、シンプルに使えそうなこちらを採用してみました。
UIButtonの背景色を簡単設定 | まさとしの自習帳
とても楽に書けて便利なんですが、残念ながらRetina環境では角丸がぎざぎざしてしまいます。

というわけで、ちょっと手を入れてRetina対応にしてみました。
やってることは簡単で、幅と高さにUIScreenのScaleをかけ算しているだけです。
UIScreenのScaleはRetinaだと2.0、そうじゃないと1.0が返ってきます。

というわけでコード。

//  UIButton+BGColor.h

@interface UIButton (BGColor)

- (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state;
- (void)setBackgroundColorString:(NSString *)colorStr forState:(UIControlState)state;

@end
//  UIButton+BGColor.m
#import "UIButton+BGColor.h"

#import <QuartzCore/QuartzCore.h>
#import "UIColor-Expanded.h"

@implementation UIButton (BGColor)

- (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state {
    CGFloat width = self.frame.size.width*[[UIScreen mainScreen] scale]; // 追加
    CGFloat height = self.frame.size.height*[[UIScreen mainScreen] scale]; // 追加
    CGRect buttonSize = CGRectMake(0, 0, width, height); // 変更
    UIView *bgView = [[[UIView alloc] initWithFrame:buttonSize] autorelease];
    bgView.layer.cornerRadius = 5*[[UIScreen mainScreen] scale]; // 変更
    bgView.clipsToBounds = true;
    bgView.backgroundColor = color;
    UIGraphicsBeginImageContext(CGSizeMake(width, height)); // 変更
    [bgView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [self setBackgroundImage:screenImage forState:state];
}

- (void)setBackgroundColorString:(NSString *)colorStr forState:(UIControlState)state {
    UIColor *color = [UIColor colorWithHexString:colorStr];
    [self setBackgroundColor:color forState:state];
}

@end

追加したのは2行のみで、幅と高さを再設定しているだけです。
変更しているのはself.frame.sizeを参照しているところをwidth,heightに置き換えているのと、ボタンの角丸の角丸具合を決めるところにもScaleを使うようにしたところです。

UIColor-Expanded.hを呼び出しているので、ars / uicolor-utilitiesからUIColor-Expanded.hとUIColor-Expanded.mを取ってきて入れといてください。
UIColor-Expanded.hについては引用元のUIButtonの背景色を簡単設定 | まさとしの自習帳を参照してください。

Interface Builderを使わないiOSプログラミングはこの本で覚えました。やってみると楽ですよ。

iPhoneプログラミングUIKit詳解リファレンス
所 友太
リックテレコム
売り上げランキング: 19,989

UIもちゃんとしたいです。

iPhoneアプリ設計の極意 ―思わずタップしたくなるアプリのデザイン
Josh Clark
オライリージャパン
売り上げランキング: 19,104
カテゴリー: ソースコード, iOS, Mac タグ: , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中