Добавление средств выбора пользовательского цвета к цветной панели

Палитра цветов является пользовательским интерфейсом для выбора цвета в NSColorPanel объект. Цветная панель позволяет пользователю выбрать палитру цветов из матрицы NSButtonCell объекты через вершину панели. Палитра цветов является загружаемым пакетом с расширением .colorPicker это может быть установлено в одном из четырех мест:

Пакет должен содержать все требуемые ресурсы для палитры цветов, включая файлы пера, файлы образа, и т.д. Эти ресурсы должны интернационализироваться для каждой поддерживаемой локализации. NSColorPanel выделяет и инициализирует экземпляр каждого класса для каждого пакета палитры цветов, найденного в этих расположениях. Имя класса, как предполагается, является именем каталога пакета минус .colorPicker расширение. Если у Вас есть значок в формате TIFF (включая a .tiff расширение) и с тем же именем как тот из класса палитры цветов, цветная панель выводит на экран его в ячейке кнопки наверху панели.

Обзор палитры цветов API

NSColorPickingDefault и NSColorPickingCustom протоколы обеспечивают интерфейс для добавления средств выбора пользовательского цвета к цветной панели приложения. NSColorPickingDefault протокол обеспечивает основное поведение для палитры цветов. NSColorPickingCustom протокол обеспечивает специфичное для реализации поведение.

NSColorPicker класс реализует NSColorPickingDefault протокол. Для реализации собственной палитры цветов, необходимо создать подкласс NSColorPicker и реализация NSColorPickingCustom протокол для того подкласса. Можно также повторно реализовать любого NSColorPickingDefault методы, если существует потребность к; например, Вы могли записать код для предоставления подсказки по инструменту пользователя или изображения с именем кроме имени класса палитры цветов. Необходимо также реализовать представление, содержащее фактический пользовательский интерфейс выбора цвета, который будет вставлен в цветную панель для палитры цветов. Пользовательское NSColorPicker объект должен иметь выход, подключающий его к этому представлению.

API палитры цветов требует, чтобы Вы указали поддерживаемые режимы палитры цветов. Для списка существующих режимов палитры цветов и констант режима, посмотрите Выбор Color Pickers в Цветной Панели. Если Ваша палитра цветов включает подрежимы, необходимо определить уникальное значение для каждого подрежима. Как пример, средство выбора ползунка имеет четыре значения, определенные в вышеупомянутом списке (NSGrayModeColorPanel, NSRGBModeColorPanel, NSCMYKModeColorPanel, и NSHSBModeColorPanel) — один для каждого из его подрежимов.

Процедура для создания средства выбора пользовательского цвета

То, что следует, является коротким учебным руководством для создания средств выбора пользовательского цвета, автоматически добавляющихся к цветной панели. Процедура довольно проста, но существует несколько подробных данных, о которых необходимо знать. Учебное руководство использует RadiantPicker проект в качестве примера, установленный в /Developer/Examples/AppKit.

Запустите путем создания проекта для пакета Какао: Выберите New Project из меню File и затем выберите Cocoa Bundle из списка типов проектов. Поскольку имя пакета вводит то же имя, Вы намереваетесь дать имени Вашего NSColorPicker подкласс.

Следующий шаг не абсолютно необходим, но полезен для отладки и тестирования средства выбора пользовательского цвета. Как показано на рисунке 1, дважды щелкните по папке проекта в XCode и, в области General предпочтений проекта, установите каталог выпуска продукта сборки в Library/ColorPickers в Вашем корневом каталоге.

Рисунок 1  , Указывающий расположение для созданной палитры цветов
Specifying the location for the built color picker

Затем установите расширение пакета палитры цветов: дважды щелкните по цели пакета, выберите область Build и ищите Настройку внутреннего абонента Обертки. Измените значение этой установки в «палитру цветов», как показано на рисунке 2.

Рисунок 2  , Устанавливающий расширение пакета
Setting the bundle extension

Последний шаг в конфигурации проекта должен установить два свойства: идентификатор пакета и основной класс. Имя основного класса должно совпасть с именем проекта. Рисунок 3 иллюстрирует то, на что могли бы быть похожими эти настройки.

Рисунок 3  , Устанавливающий идентификатор пакета и основной класс
Setting bundle identifier and principal class

Теперь давайте оставим XCode некоторое время и переключимся для Взаимодействия через интерфейс с Разработчиком. Тип проекта Пакета Какао не включает файл пера, таким образом, необходимо будет добавить тот. Запустите приложение, и в Starting Point панель выбирает Empty под Какао и нажимает New (см. рисунок 4).

Рисунок 4  , Создающий файл пера для палитры цветов
Creating a nib file for the color picker

Перетащите Пользовательский объект Представления от палитры Containers на Ваше окно файла пера (этот шаг требует OS X v10.4 или больше). Тогда создайте пользовательский интерфейс своей палитры цветов на этом представлении с объектами палитры (если необходимый). Рисунок 5 дает пример того, что Вы могли бы видеть в Интерфейсном Разработчике. Измерьте представление так, чтобы это было соразмерно с NSSize значение возвратилось из NSColorPicker реализация NSColorPickingDefault метод протокола minContentSize. Сохраните файл пера под надлежащим именем и затем, в XCode, добавьте файл пера к проекту как локализованный ресурс.

Рисунок 5  окно файла пера для палитры цветов
The nib file window for the color picke

Теперь прибывает время для некоторого кодирования, начиная с Вашего пользовательского подкласса NSColorPicker. В XCode создайте файлы для нового класса Objective C и добавьте их к проекту (Файл> Новый Файл). Дайте заголовок, и реализация регистрирует то же имя (минус расширения) как тот из проекта. Откройте заголовочный файл и измените суперкласс NSColorPicker и объявите, что класс принимает NSColorPickingCustom протокол. Также добавьте любые выходы, которых Вы требуете к представлению, содержащему пользовательский интерфейс палитры цветов. Перечисление 1 иллюстрирует то, на что должны быть похожими объявления заголовочного файла.

  Объявления перечисления 1 NSColorPicker подкласс

@interface RadiantColorPicker: NSColorPicker <NSColorPickingCustom> {
    IBOutlet NSView *_pickerView;
    IBOutlet RadiantColorControl *_radiantColorControl;
}
@end

Сохранить Интерфейсного Разработчика синхронизировалось с этими изменениями, перетащите заголовочный файл от XCode и заглядывайте к окну файла пера. Выберите значок File's Owner в окне файла пера, откройте Пользовательского инспектора Класса область (Команда 5) и выберите NSColorPicker разделите на подклассы Вы просто объявили. Тогда соедините любые выходы, которые Вы определили для того класса.

В этой точке создайте и добавьте файлы для любых пользовательских классов, необходимых для пользовательского интерфейса палитры цветов. Как с пользовательским NSColorPicker подкласс, добавили любые требуемые объявления к заголовочному файлу, и затем перетащите этот файл на окно файла пера для создания Интерфейсного Разработчика, знающего о пользовательском представлении. Присвойте пользовательский класс представления с помощью Пользовательского инспектора Класса область. Вы, возможно, должны сделать это прежде, чем сделать любые соединения розетки между пользовательским классом представления и Вашим NSColorPicker подкласс.

Реализуйте Ваш NSColorPicker подкласс, по крайней мере, реализовывая методы NSColorPickingCustom протокол и, дополнительно, повторно реализовывая методы NSColorPickingDefault протокол, по мере необходимости. Перечисление 2 обеспечивает пример.

  Демонстрационная реализация перечисления 2 пользовательского NSColorPicker класс

@implementation RadiantColorPicker
 
- (id)initWithPickerMask:(NSUInteger)mask colorPanel:(NSColorPanel *)owningColorPanel {
    return [super initWithPickerMask:mask colorPanel:owningColorPanel];
}
 
- (void)dealloc {
    [_pickerView release];
    [super dealloc];
}
 
- (BOOL)supportsMode:(NSColorPanelMode)mode {
    return (mode == NSRGBModeColorPanel) ? YES : NO;
}
 
- (NSColorPanelMode)currentMode {
    return NSRGBModeColorPanel;
}
 
- (NSView *)provideNewView:(BOOL)initialRequest {
    if (initialRequest) {
        // Load our nib files
        if (![NSBundle loadNibNamed:@"RadiantColorPicker" owner:self]) {
            NSLog(@"ERROR: couldn't load MyColorPicker nib");
        }
        [_radiantColorControl setTarget:self];
        [_radiantColorControl setAction:@selector(colorChanged:)];
    }
    return _pickerView;
}
 
- (void)colorChanged:(id)sender {
    [[self colorPanel] setColor:[_radiantColorControl color]];
}
 
- (void)setColor:(NSColor *)newColor {
    [_radiantColorControl setColor:newColor];
}
 
- (NSString *)buttonToolTip {
    return NSLocalizedString(@"Radiant Picker", @"Tooltip for the radiant color picker button in the color panel");
}
 
@end

Существует несколько вещей отметить об этом коде:

Реализуйте пользовательские объекты представления для своей палитры цветов по мере необходимости.

Когда Вы закончили реализовывать и тестировать Ваше средство выбора пользовательского цвета, и это - сторонний продукт, создайте установщик для него, вставляющий одно из предписанных расположений.