7

UIColorから[RGBA]カラーコンポーネントを取得するためのより速い(またはより良い)方法はありますか?これには多くのバリエーションがあるようです(ここにいくつかあり、すべて基本的にここで行ったことと似ています)他のすべてが通常そうであることを考えると、少し「欠けている」ように見えるので、代替手段があるかどうかだけ興味があります完全でよく考えられています。

if([eachKey isEqualToString:@"NSColor"]) {
    UIColor *newColor = [attrs valueForKey:eachKey];
    //NSLog(@"COLOR: %@", newColor);
    CGColorRef colorRef = [newColor CGColor];
    //NSLog(@"%@", colorRef);
    int numComponets = CGColorGetNumberOfComponents(colorRef);
    if(numComponets == 4) {
        const CGFloat *components = CGColorGetComponents(colorRef);
        CGFloat compR = components[0];
        CGFloat compG = components[1];
        CGFloat compB = components[2];
        CGFloat compA = components[3];

        //NSLog(@"R:%f G:%f B:%f, A:%f", compR, compG, compB, compA);
    }
}

私はどのように(私は上記の長いバージョンを持っていると思います)これがあなたが今これをすることになっている方法であるかどうか知りたいだけです。

4

3 に答える 3

16
CGFloat r, g, b, a;    
[MyColor getRed: &r green:&g blue:&b alpha:&a];

iOS5以降が必要です。

于 2012-06-28T16:23:17.143 に答える
2

クラスリファレンスでこのメソッドを確認してください。

于 2012-06-28T16:23:54.783 に答える
1
- (BOOL)getRed:(CGFloat *)red 
         green:(CGFloat *)green 
          blue:(CGFloat *)blue 
         alpha:(CGFloat *)alpha

上記の方法は信頼できません。 [UIColor whiteColor](または他のグレースケールcolor)に対してNOを返します。

使用する

if(numComponets == 5) {

それ以外の

if(numComponets == 4) {

APIドキュメントから:

The size of the array is one more than the number of components of the color 
space for the color.
于 2012-11-23T17:37:05.273 に答える