Как мне использовать "getHue: saturation: яркость: альфа:"? - PullRequest
2 голосов
/ 25 ноября 2011

Этот метод есть в UIColor в iOS 5:

- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha

Но я не понимаю, как я собираюсь использовать это в коде. Конечно, мне не нужно указывать каждый из этих компонентов, если я хочу получить это из UIColor?

Ответы [ 2 ]

16 голосов
/ 25 ноября 2011
CGFloat hue;
CGFloat saturation;
CGFloat brightness;
CGFloat alpha;

[aColor getHue:&hue 
    saturation:&saturation 
    brightness:&brightness 
         alpha:&alpha];    
//now the variables hold the values

getHue:saturation:brightness:alpha: возвращает логическое значение, определяющее, мог ли вообще быть преобразован UIColor.

Пример:

BOOL b = [[UIColor colorWithRed:.23 green:.42 blue:.9 alpha:1.0] getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
NSLog(@"%f %f %f %f %d", hue, saturation, brightness, alpha, b);

будет записывать 0.619403 0.744444 0.900000 1.000000 1, так какдействителен

, а

BOOL b = [[UIColor colorWithPatternImage:[UIImage imageNamed:@"pattern.png"]] getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
NSLog(@"%f %f %f %f %d", hue, saturation, brightness, alpha, b);

logs 0.000000 0.000000 -1.998918 0.000000 0.Последний 0 - это Bool, так что это недопустимо и на самом деле brightness can only range from 0.0 to 1.0, но здесь он содержит некоторую случайную чушь.

Заключение

Код должен быть примерно таким:

CGFloat hue;
CGFloat saturation;
CGFloat brightness;
CGFloat alpha;

if([aColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]){
    //do what ever you want to do if values are valid
} else {
    //what needs to be done, if converting failed? 
    //Some default values? raising an exception? return?
}
8 голосов
/ 25 ноября 2011

Обратите внимание, что эти четыре параметра являются указателями до CGFloat с, а не просто значениями.Это стандартная передача C по ссылке.См. Также следующие вопросы переполнения стека:

Как пример:

CGFloat hue, saturation, brightness, alpha;
[myColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
// hue, saturation, brightness, and alpha are now set
...