Отображение изображений Используя привязку

Вы обычно изображения на дисплее с помощью или NSImageCell или NSImageView. Вы могли бы изображения на дисплее в столбцах таблицы в основном интерфейсе или представлении изображения в подробном интерфейсе. Оба из этих компонентов имеют подобную привязку и поэтому оба обсуждены в этой статье. При использовании этих компонентов также необходимо принять подобные решения относительно того, как Вы хотите сохранить и получить доступ к Вашим изображениям. Привязка значения этих компонентов поддерживает множество форматов. Можно указать привязку значения с помощью NSImage, пути к файлу или URL.

Примером, представленным в этой статье, является расширение тех в Создании Интерфейса Основной Подробности. В частности эта статья объясняет, как добавить NSImageCell к столбцу таблицы в основном интерфейсе (показанный на рисунке 1) и NSImageView к подробному интерфейсу. Эта статья также содержит пример пользовательского преобразователя значения, преобразовывающего имена файла образа в абсолютные пути.

Посмотрите Создание Интерфейса Основной Подробности для шагов для создания основного интерфейса основной подробности.

Рисунок 1  Используя NSImageCell в NSTableColumn

Создание моделей

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

В этом примере модель использует NSImage для представления image свойство Мультимедийного объекта как показано на рисунке 2 в Создании Интерфейса Основной Подробности.

В случае пути к файлу или URL, Вы обычно храните только имя файла в модели не абсолютный путь или URL (например, Вы не хотите обновлять свои модели каждый раз, когда Вы перемещаете папку изображения). Однако привязка ожидает абсолютный путь или URL. Одно решение состоит в том, чтобы реализовать пользовательский преобразователь значения, берущий имя файла образа и возвращающий путь к файлу или URL на основе некоторых переменных, которые Вы определяете. Посмотрите Используя Преобразователь Значения для Преобразования Путей для изменения этого примера для использования путей к файлам вместо объектов NSImage.

Создание представлений

Затем, Вы создаете представления изображения или перетаскиванием NSImageView к окну или NSImageCell к столбцу, который выведет на экран изображения.

Создание контроллеров

Этот пример предполагает, что у Вас уже есть рабочий интерфейс основной подробности. Выполните шаги в Создании Контроллеров в Создании Интерфейса Основной Подробности, если необходимо создать контроллер массива.

Привязка представлений к контроллерам

Затем, Вы связываете представления изображения с контроллерами. Подмножество привязки значения NSImageView и NSTableColumn (содержащий NSImageCell) для выбора из:

Например, Вы конфигурируете value привязка для столбца таблицы Изображения на рисунке 1 следующим образом:

  1. Набор Bind to к Вашему объекту контроллера массива. Например, MediaAssetsController.

  2. Набор Controller Key к arrangedObjects (набор выводимых на экран объектов).

  3. Набор Model Key Path к свойству NSImage для отображения в том столбце. Например, в приложении актива носителей, устанавливает ключевой путь к image.

Вы конфигурируете value привязка для NSImageView в подробности взаимодействует через интерфейс точно так же за исключением того, что Вы устанавливаете Controller Key значение к selection (т.е. в настоящее время выбранный объект).

Посмотрите Используя Преобразователь Значения для Преобразования Путей для изменения этого примера, использующего valuePath привязка.

Используя преобразователь значения для преобразования путей

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

Создание пользовательских преобразователей значения

Сначала создайте пользовательский преобразователь значения, берущий имя файла или относительный путь и преобразовывающий его в абсолютный путь. Вы делаете это путем разделения на подклассы NSValueTransformer и переопределения transformedValueClass и allowsReverseTransformation методы класса, как показано в Перечислении 1.

Вы реализуете transformedValue: метод для выполнения трансформации. Например, transformedValue: реализация метода в Перечислении 1 предполагает, что изображения расположены в проекте Resources папка и NSBundle’s использования resourcePath: метод для преобразования имени файла в абсолютный путь. Обратите внимание на то, что необходимо изменить этот пример при хранении изображений где-то в другом месте в файловой системе.

Перечисление 1  файл реализации PathTransformer

#import "PathTransformer.h"
 
@implementation PathTransformer
 
+ (Class)transformedValueClass
{
    return [NSString self];
}
 
+ (BOOL)allowsReverseTransformation
{
    return NO;
}
 
- (id)transformedValue:(id)beforeObject
{
    if (beforeObject == nil) return nil;
    id resourcePath = [[NSBundle mainBundle] resourcePath];
    return [resourcePath stringByAppendingPathComponent:beforeObject];
}
 
@end

Регистрация преобразователей значения

Для использования пользовательского преобразователя значения необходимо сначала зарегистрировать его в NSValueTransformer. Обратите внимание на то, что Вы регистрируете экземпляры преобразователя значения, не подкласс. Вы обычно регистрируете преобразователи значения в initialize метод или делегат приложения applicationDidFinishLaunching: метод. При регистрации преобразователя значения Вы даете ему логическое имя, которое можно использовать позже при конфигурировании привязки. Например, добавьте следующий фрагмент кода к applicationDidFinishLaunching: зарегистрировать вызванный экземпляр PathTransformer:

id transformer = [[[PathTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"PathTransformer"];

Привязка представлений к контроллерам Используя преобразователи

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

  1. Установите Bind to аспект к Вашему объекту контроллера массива — например, MediaAssetsController.

  2. Установите Controller Key аспект к arrangedObjects (набор выводимых на экран объектов).

  3. Установите Model Key Path аспект к свойству, содержащему имя файла образа. Например, в приложении актива носителей, устанавливает ключевой путь к imagePath.

  4. Введите логическое имя преобразователя, PathTransformer , в текстовом поле Value Transformer.

Рисунок 2 показывает область Bindings NSTableColumn в Интерфейсном Разработчике с valuePath привязка показала и сконфигурировала для использования пользовательского преобразователя значения.

  Область Bindings рисунка 2 NSTableColumn

Использовать valueURL при привязке вместо этого, реализуйте подобный преобразователь значения для преобразования имен файлов или относительных путей к надлежащему объекту NSURL. Дополнительно, можно улучшить класс PathTransformer для обработки других типов трансформаций имени файла. В последнем случае зарегистрируйте различные экземпляры с помощью различных имен (например, PathTransformer и URLTransformer) обработать каждый тип трансформации.