1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/winter7-OneKeyChangeXIBColor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

###Подробное описание, пожалуйста, перейдите!

Все студенты могут оставить комментарий, чтобы вместе прогрессировать!


###2016.12.22

В последнее время у меня было немного свободного времени, поэтому я решил обновить небольшой инструмент, который создал ранее. За это время произошло обновление Xcode8, и, вероятно, этот небольшой инструмент больше не работает. Я попытался запустить проект с помощью cmd+R, но он действительно не работает, так что я решил обновить этот небольшой инструмент.

####Некоторые улучшения в использовании:

  1. Я создал удобный интерфейс, где можно работать с цветовыми значениями;
  2. Можно нажать на путь к файлу, чтобы выбрать нужный файл для изменения пути. simple1.png simple2.png

####Оптимизация кода:

#####1. Сначала кратко опишу принцип работы:

-> Отдельно записываются цветовые модели до и после изменений (beforeColor и afterColor), а также путь к файлу (filePath); -> Пользовательский ввод преобразуется в необходимый тип, то есть цветное значение преобразуется в модель ColorValue; -> Проходится по пути filePath, находя все файлы .xib и .storyboard, и сохраняется путь к файлу; -> Для каждого файла .xib и .storyboard выполняется операция DOM-парсинга, чтобы найти все элементы color типа NSXMLElement; -> Находятся соответствующие node.name и over для элемента color.

#####2. Некоторые основные фрагменты кода:

  • Запись цвета, это метод делегата textField, выбор пути к файлу с использованием NSOpenPanel:
// NSTextDelegate получает содержимое ввода
- (void)controlTextDidChange:(NSNotification *)notification

//  Выбор пути к файлу
- (IBAction)choseFilePath:(NSButton *)sender
{
        NSOpenPanel *openPanel = [NSOpenPanel openPanel];
        [openPanel setCanChooseFiles:YES];
        [openPanel setCanChooseDirectories:YES];

        NSWindow *window = [[NSApplication sharedApplication] keyWindow];
        [openPanel beginSheetModalForWindow:window completionHandler:^(NSModalResponse returnCode) {
            if (returnCode == 1) {
                NSURL *fileUrl = [[openPanel URLs] objectAtIndex:0];
                NSString *filePath = [[fileUrl.absoluteString componentsSeparatedByString:@"file://"] lastObject];
                NSLog(@"fileContext = %@",filePath);
                self.sourcePathTextField.stringValue = filePath;
                self.filePath = filePath;
            }
        }];
}
  • Модель данных цвета ColorValue:
// RGB-значение преобразуется в четыре десятичных знака 
здесь ‘*10000’ снова ‘0.%ld’ - это отсечение десятичной дроби после четырех знаков
- (void)setRed:(CGFloat)red
{
     _red = red;
    
    CGFloat temp = red / 255.0;
    NSInteger tempValue = temp * 10000;
    self.redString = [NSString stringWithFormat:@"0.%ld",tempValue];
}
  • Поиск файлов .xib и .storyboard, здесь нечего сказать, просто операции с файлами и поиск расширений файлов;
  • Получение элементов color (NSXMLElement) и их изменение:
// Получение XMLDocument
- (NSXMLDocument *)parsedDataFromData:(NSData *)data colorModel:(WDColorModel *)objColorModel
{
        NSError *error = nil;
        NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:NSXMLNodePreserveWhitespace error:&error];
        NSXMLElement *rootElement = document.rootElement;
        [self parsedXMLElement:rootElement objColorModel:objColorModel];

        if (error) {
            NSLog(@"error = %@",error);
        }
        return document;
}

// Изменение элемента
- (void)parsedXMLElement:(NSXMLElement *)element objColorModel:(WDColorModel *)objColorModel
{
        for (NSXMLElement *subElement in element.children) {
            if ([subElement.name isEqualToString:@"color"]) {
              WDColorModel *obj = [WDColorModel colorModelWithArray:subElement.attributes];
                if ([obj isEqual:self.targetColorModel]) {
                    [self updateXMLNodelWithNode:subElement color:objColorModel];
                }
            }
            [self parsedXMLElement:subElement objColorModel:objColorModel];
        }
}

// Обновление NSXMLElement
- (void)updateXMLNodelWithNode:(NSXMLElement *)subElement color:(WDColorModel *)obj
{
         NSArray *array = subElement.attributes;
         for (NSXMLNode *node in array) {   
            if ([node.name isEqualToString:@"red"]) {
                [node setStringValue:obj.red];
            }
            else if ([node.name isEqualToString:@"green"]) {
                [node setStringValue:obj.green];
            }
            else if ([node.name isEqualToString:@"blue"]) {
                [node setStringValue:obj.blue];
            }
         }
}

Подробности см. в коде.

end

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Быстрое изменение цвета элементов управления в XIB или Storyboard. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/winter7-OneKeyChangeXIBColor.git
git@api.gitlife.ru:oschina-mirror/winter7-OneKeyChangeXIBColor.git
oschina-mirror
winter7-OneKeyChangeXIBColor
winter7-OneKeyChangeXIBColor
master