Nano Hash - криптовалюты, майнинг, программирование

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

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

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

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

15.12.2010

Ответы:


1

Я предпочитаю использовать строку для хранения цвета. Код синтаксического анализа, который выполняет это, показан ниже (вырезан из 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);
    }
}
16.09.2013

2

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

  • Добавьте свойство цвета как число типа в список
  • Введите цвет в шестнадцатеричном формате 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);

After entering the color as hexdecimal, the plist editor will show it as a decimal number. Not nice. As a developer you normally copy paste the colors from a design document anyway, so the need to read the color values is not that big.

13.09.2013

3

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

@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].

27.08.2013
  • Просто обратите внимание, что значения красного, зеленого и синего цветов равны 0,0–1,0, а не 0–255, поэтому разделите их на 255, чтобы получить правильное значение - это меня на время зацепило. 07.02.2014
  • Это для хранения в plist, вы, вероятно, захотите создать цвета в plist. Информацию о помощниках по преобразованию RGB см. В разделе stackoverflow.com/questions/13224206/ и stackoverflow.com/questions/437113/. 07.02.2014

  • 4

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

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

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

    03.03.2011
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..