色の値をUserDefaultに保存する

| コメント(0) | トラックバック(0)
こんにちは。開発担当のICTFです。

今回はUIColorクラスに設定されている色をUserDefaultに保存する為の方法を紹介します。
一番簡単な方法としては、

[[NSUserDefaults standardUserDefaults] setObject:[UIColor whiteColor] forKey:@"Color"];

このようにsetObject:で保存し、

UIColor* color = [[NSUserDefaults standardUserDefaults] objectForKey:@"Color"];

objectForKey:で読み込むことですね。

勿論この方法で問題が無ければ、簡単ですし一番お勧めできる方法です。


しかし、上記の記録方法を採った場合plistなどに初期値の色を設定できないところが難点です。

ですので初期値としての色をplistに設定でき、かつUIColorとしてシームレスに使うことのできる実装を行ないます。


流れとしては、

1. UIColorのRGB成分をそれぞれFloat型変数に抽出する

2. 3つ(R, G, B)のFloat変数をUserDefaultに保存する

3. UserDefaultから3つの値を読み込み、UIColorを生成する

となります。


それでは1から順に実装していきましょう。

-(void) setColor:(UIColor *)Color

{

[_Color release];

_Color = [Color retain];

// ユーザデフォルトに書き込む

const CGFloat* c = CGColorGetComponents(_Color.CGColor);

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

[defaults setFloat:c[0] forKey:COLOR_R];

[defaults setFloat:c[1] forKey:COLOR_G];

[defaults setFloat:c[2] forKey:COLOR_B];

[defaults synchronize];

}

例ではUIColor型プロパティのセッターに実装しています。

CGColorGetComponents関数にCGColorを渡すことにより、各要素がCGFloat型の配列で返されます。

配列の引数と値の対応は以下の通りです。

[0]:赤(R)

[1]:緑(G)

[2]:青(B)

[3]:Alpha

各要素をsetFloat:で保存します。


読み込みは次のように実装します。

self.Color = [UIColor colorWithRed:[defaults floatForKey:COLOR_R] green:[defaults floatForKey:COLOR_G] blue:[defaults floatForKey:COLOR_B] alpha:1.0];


最後にplistに3つの値の初期値を設定すれば実装完了となります。


トラックバック(0)

トラックバックURL: http://www.ict-fractal.com/MovableType/mt/mt-tb.cgi/31

コメントする

Twitterボタン
Twitterブログパーツ