Начало работы с областями монтажа

Это учебное руководство предлагает быстрое, практическое, введение в использование областей монтажа. Это не обеспечивает всестороннее объяснение того, как области монтажа работают, или подробные данные используемых методов. Они обсуждены в более поздних статьях в этом документе.

Введение

Это учебное руководство представляет Вас областям монтажа на OS X. Проект является простым основанным на документе приложением, управляющим окном, содержащим представление изображения. Можно скопировать и вставить изображения между документами в приложении, или к и из другого приложения. Приложение не будет поддерживать сохранение и вводные документы, несмотря на то, что можно легко добавить эту функциональность.

На завершении этого учебного руководства необходимо быть в состоянии:

Перед запуском

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

  • Как создать новый проект XCode

  • Как сконфигурировать пользовательский интерфейс в Интерфейсном Разработчике

  • Как определить и реализовать простой класс

Вы, должно быть, по крайней мере, или работали через Запуск, Разрабатывающий Приложения Mac Сегодня, или получили эквивалентный опыт с помощью других примеров.

Также полезно понять:

  • Архитектура документа

    Вы не должны понимать архитектуру документа подробно — приложение не будет поддерживать сохранение и вводные документы, несмотря на то, что можно легко добавить эти опции. Цель состоит в том, чтобы просто обеспечить приложение, поддерживающее копию и вставку между многократными окнами, и это наиболее легко достигается с помощью архитектуры документа. Если Вы хотите знать больше об архитектуре документа, считайте Руководство по программированию Приложения Mac.

  • Панели инструментов

    Документ использует панель инструментов для иллюстрирования проверки пользовательского интерфейса.

  • Проверка пользовательского интерфейса

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

Сводка

Основные этапы учебного руководства следующие:

  • Создайте простое основанное на документе приложение

  • Сконфигурируйте класс документа для взаимодействия с простым пользовательским интерфейсом

  • Сконфигурируйте пользовательский интерфейс документа

  • Добавьте копию и методы вклеивания для документа

  • Добавьте проверку пользовательского интерфейса к приложению

Учебное руководство

Создайте новый проект XCode

Создайте новое Какао XCode основанное на документе приложение. Вызовите свой новый CopyImage проекта или что-то как этот.

Обновите класс документа

Документ поддерживает простой пользовательский интерфейс, содержащий представление изображения. Это знает, как скопировать изображение с представления изображения и вставить изображение в представление изображения.

Обновите MyDocument.h к этому:

#import <Cocoa/Cocoa.h>
 
@interface MyDocument : NSDocument
{
    NSImageView *imageView;
}
@property (nonatomic, retain) IBOutlet NSImageView *imageView;
- (IBAction)copy:sender;
- (IBAction)paste:sender;
@end

Обновление MyDocument.m. В дополнение к методам, предоставленным шаблоном, синтезируйте свойство и добавьте тупиковые реализации copy: и paste: методы: методы:

@synthesize imageView;
- (IBAction)copy:sender {
}
- (IBAction)paste:sender {
}

Сконфигурируйте пользовательский интерфейс

К окну документа:

  • Добавьте представление изображения

  • Свяжите документ (Владелец Файла) imageView выход к представлению изображения

  • Добавьте панель инструментов

  • Добавьте два элемента панели инструментов к панели инструментов — одна маркированная «Копия», другая «Вставка»

  • Подключите действия элементов панели инструментов «Copy» и «Paste» к Владельцу Файла copy: и paste: действия соответственно

Необходимо закончить с окном документа, которое похоже на это:

../Art/copyApplicationWindow.jpg

Добавьте поддержку копии документу

Существует три шага к записи в область монтажа:

  1. Получите область монтажа

  2. Очистите содержание области монтажа

  3. Запишите массив объектов к области монтажа

Объекты, которые Вы пишете в область монтажа, должны принять NSPasteboardWriting Protocol Reference протокол. Несколько из общих классов Набора Основы и Приложения реализуют протокол включая NSString, NSImage, NSURL, и NSColor. (Если Вы хотите записать экземпляр пользовательского класса, любой, которого это должно принять NSPasteboardWriting протокол или Вы можете обернуть его в экземпляр NSPasteboardItem— посмотрите пользовательские данные.) С тех пор NSImage принимает NSPasteboardWriting протокол, можно записать экземпляр непосредственно в область монтажа.

В классе MyDocument завершите реализацию copy: следующим образом:

- (IBAction)copy:sender {
    NSImage *image = [imageView image];
    if (image != nil) {
        NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
        [pasteboard clearContents];
        NSArray *copiedObjects = [NSArray arrayWithObject:image];
        [pasteboard writeObjects:copiedObjects];
    }
}

Протестируйте приложение

Сборка и запущенный Ваше приложение.

  • Перетащите изображение от Средства поиска или из другого приложения в представление изображения документа

  • Нажмите Copy на панели инструментов

Необходимо найти, что можно вставить изображение в другое приложение. (Например, в текстовом Редактировании, создайте недавно разбогатевший Текстовый документ, тогда выбирают Edit> Paste.)

Добавьте поддержку вставки документу

Прежде чем Вы попытаетесь читать из области монтажа, необходимо проверить, что она содержит данные, которые Вы хотите.

Вы проверяете, что область монтажа содержит объекты, которыми Вы интересуетесь путем отправки ей a canReadObjectForClasses:options: сообщение. Первым параметром является массив, которые говорят область монтажа, какие классы возражают, что Вы интересуетесь.

Классы, которые Вы просите читать из области монтажа, должны принять NSPasteboardReading протокол. Как запись, несколько из общих классов Набора Основы и Приложения реализуют протокол, снова включая NSString, NSImage, NSURL, и NSColor. (Точно так же, если Вы хотите считать экземпляр своего собственного класса класса, любой, которого это должно принять NSPasteboardReading протокол или, когда Вы пишете его в область монтажа, можно обернуть его в экземпляр NSPasteboardItem и получите, это — видит Пользовательские Данные.) С тех пор NSImage принимает NSPasteboardReading протокол, можно считать экземпляр непосредственно из области монтажа

Если область монтажа действительно содержит объекты, Вы интересуетесь, можно получить их путем отправки области монтажа a readObjectsForClasses:options:. сообщение. Область монтажа определяет, какие объекты она содержит, который может быть представлен с помощью классов, которые Вы указываете, и возвращает массив лучших соответствий (если таковые имеются).

В классе MyDocument завершите реализацию paste: следующим образом:

- (IBAction)paste:sender {
    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
    NSArray *classArray = [NSArray arrayWithObject:[NSImage class]];
    NSDictionary *options = [NSDictionary dictionary];
 
    BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options];
    if (ok) {
        NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options];
        NSImage *image = [objectsToPaste objectAtIndex:0];
        [imageView setImage:image];
    }
}

Протестируйте приложение

Сборка и запущенный Ваше приложение:

  • Перетащите изображение от Средства поиска или из другого приложения в окно документа

  • Нажмите Copy на панели инструментов

  • Создайте новый документ (выберите File> New),

  • В новом документе нажмите Paste на панели инструментов

Необходимо найти, что можно вставить изображение из первого документа во второе. Если у Вас есть другое приложение, позволяющее Вам копировать и вставлять изображения, необходимо также найти, что можно скопировать и вставить между тем приложением и учебным приложением.

Дополнительный Кредит: проверка Меню

Это - хорошая практика для ограничения пользователя выполнением действий, которые будут иметь эффект. Даже если нет никакого изображения на области монтажа, в текущем приложении можно нажать элемент панели инструментов Paste. Было бы лучше отключить элемент, если нет ничего на области монтажа, которая может быть вставлена.

Проверка пользовательского интерфейса — поддерживаемый NSUserInterfaceValidations протокол — обеспечивает стандартный способ установить состояние интерфейсных элементов как подходящее для текущего контекста приложения. Протокол содержит отдельный метод —validateUserInterfaceItem:— это возвращает булевскую переменную, указывающую, передал ли элемент пользовательского интерфейса, поскольку должен быть включен параметр.

Когда Вы реализуете validateUserInterfaceItem:, Вы обычно сначала проверяете действие, связанное с элементом пользовательского интерфейса (Вы не хотите включать или отключать каждый элемент на основе единственного теста). В этом случае, если связанное действие, Вам только интересно paste:. Если это, тогда необходимо проверить, существует ли что-нибудь на области монтажа, которая может быть вставлена. Можно использовать canReadObjectForClasses:options: спросить область монтажа, если это содержит какие-либо данные, которые могут быть преобразованы в NSImage объект.

В Вашем классе документа, реализации validateUserInterfaceItem: следующим образом:

- (BOOL)validateUserInterfaceItem:(id < NSValidatedUserInterfaceItem >)anItem {
 
    if ([anItem action] == @selector(paste:)) {
        NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
        NSArray *classArray = [NSArray arrayWithObject:[NSImage class]];
        NSDictionary *options = [NSDictionary dictionary];
        return [pasteboard canReadObjectForClasses:classArray options:options];
    }
    return [super validateUserInterfaceItem:anItem];
}

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