Как загрузить UIColor из Plist - PullRequest
       3

Как загрузить UIColor из Plist

8 голосов
/ 15 декабря 2010

Относительно сохранения UIColor в Plist: я пробовал разные способы, но не смог этого сделать, я хочу сохранить и получить значения цвета в файле plist.

Я не могу извлечь данныеЗначение цвета с помощью nslog и сохранить его в plist.

Есть ли другой способ сделать это?

Ответы [ 4 ]

7 голосов
/ 16 сентября 2013

Я предпочитаю использовать строку для хранения цвета. Код синтаксического анализа, который делает это, показан ниже (вырезано из https://github.com/xslim/TKThemeManager/blob/master/TKThemeManager.m#L162)

+ (UIColor *)colorFromString:(NSString *)hexString {    
    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    unsigned hex;
    BOOL success = [scanner scanHexInt:&hex];

    if (!success) return nil;
    if ([hexString length] <= 6) {
        return UIColorFromRGB(hex);
    } else {
        unsigned color = (hex & 0xFFFFFF00) >> 8;
        CGFloat alpha = 1.0 * (hex & 0xFF) / 255.0;
        return UIColorFromRGBA(color, alpha);
    }
}
3 голосов
/ 13 сентября 2013

Для быстрого решения (но, может быть, не самое красивое):

  • Добавьте свойство цвета как число типа в список
  • Введите цвет как RGB-шестнадцатеричный, например: 0xff00e3
  • Считайте его и обработайте с помощью макроса, как показано ниже

Вот пример кода:

// Add this code to some include, for reuse
#define UIColorFromRGBA(rgbValue, alphaValue) ([UIColor colorWithRed:((CGFloat)((rgbValue & 0xFF0000) >> 16)) / 255.0 \
                                                               green:((CGFloat)((rgbValue & 0xFF00) >> 8)) / 255.0 \
                                                                blue:((CGFloat)(rgbValue & 0xFF)) / 255.0 \
                                                               alpha:alphaValue])

// This goes into your controller / view
NSDictionary *myPropertiesDict = [NSDictionary dictionaryWithContentsOfFile:...];
UIColor *titleColor = UIColorFromRGBA([myPropertiesDict[@"titleColor"] integerValue], 1.0);

После ввода цвета в шестнадцатеричном виде редактор plist покажет его в виде десятичного числа.Не хорошо.Как разработчик, вы все равно копируете и вставляете цвета из проектного документа, поэтому необходимость считывания значений цвета не так уж велика.

1 голос
/ 27 августа 2013

Я сделал для этого категорию:

@implementation UIColor (EPPZRepresenter)


NSString *NSStringFromUIColor(UIColor *color)
{
    const CGFloat *components = CGColorGetComponents(color.CGColor);
    return [NSString stringWithFormat:@"[%f, %f, %f, %f]",
            components[0],
            components[1],
            components[2],
            components[3]];
}

UIColor *UIColorFromNSString(NSString *string)
{
    NSString *componentsString = [[string stringByReplacingOccurrencesOfString:@"[" withString:@""] stringByReplacingOccurrencesOfString:@"]" withString:@""];
    NSArray *components = [componentsString componentsSeparatedByString:@", "];
    return [UIColor colorWithRed:[(NSString*)components[0] floatValue]
                           green:[(NSString*)components[1] floatValue]
                            blue:[(NSString*)components[2] floatValue]
                           alpha:[(NSString*)components[3] floatValue]];
}


@end

То же форматирование, которое используется NSStringFromCGAffineTransform.На самом деле это часть более масштабного представления объекта plist в [eppz! Kit на GitHub] [1].

0 голосов
/ 03 марта 2011

Лучшее решение, которое я нашел для этой проблемы, находится на следующем сайте:

http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars

После получения строки из UIColor это должно быть достаточно простой задачей, чтобы сохранить ее вфайл plist и получить его позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...