Начало работы с областями монтажа
Это учебное руководство предлагает быстрое, практическое, введение в использование областей монтажа. Это не обеспечивает всестороннее объяснение того, как области монтажа работают, или подробные данные используемых методов. Они обсуждены в более поздних статьях в этом документе.
Введение
Это учебное руководство представляет Вас областям монтажа на 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:
действия соответственно
Необходимо закончить с окном документа, которое похоже на это:
Добавьте поддержку копии документу
Существует три шага к записи в область монтажа:
Получите область монтажа
Очистите содержание области монтажа
Запишите массив объектов к области монтажа
Объекты, которые Вы пишете в область монтажа, должны принять 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.