Показ слайдов

Нескольким приложениям, предоставленным OS X, встроили функцию слайд-шоу, включая Почту и Предварительный просмотр. Начиная с OS X v10.5, любое приложение может предоставить поддержку слайд-шоу при помощи IKSlideshow класс. В дополнение к цифровым изображениям слайд-шоу может вывести на экран страницы из документов в формате PDF, фильмов в формате QuickTime, Кварцевых составов Композитора и пользовательских форматов документов, поддерживаемых через платформу Беглого взгляда.

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

Пользовательский интерфейс слайд-шоу

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

Рисунок 4-1  слайд-шоу со средствами управления
A slideshow with controlsA slideshow with controls

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

Индексный лист (см. рисунок 4-2) позволяет пользователю видеть много слайдов одновременно и переместиться через них использующий клавиши со стрелками или путем нажимания на изображение. Если пользователь дважды щелкает по изображению или нажимает Return, резюме слайд-шоу, начиная с выбранного изображения.

Рисунок 4-2  индексный лист
The index sheetThe index sheet

Запись приложения слайд-шоу

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

Приложение слайд-шоу требует совместно используемого экземпляра IKSlideshow класс и источник данных. Вы получаете совместно используемый экземпляр с помощью метода sharedSlideshow. Вы выполняете слайд-шоу с помощью метода runSlideshowWithDataSource:options:.

Необходимо реализовать два метода IKSlideshowDataSource протокол:

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

IKSlideshowDataSource протокол определяет несколько дополнительных методов, которые Вы могли бы хотеть реализовать, такие как методы, позволяющие Вашему приложению принимать меры в определенные моменты в слайд-шоу: slideshowDidStop, slideshowWillStart, и slideshowDidChangeCurrentIndex:. Посмотрите Ссылку на протокол IKSlideshowDataSource для полные описания методов в этом протоколе.

Как работает простое приложение слайд-шоу

Приложение слайд-шоу, которое Вы создадите в этом разделе, довольно просто. Это реализует требуемые методы IKSlideshowDataSource протокол и позволяет пользователю останавливать слайд-шоу и перезагружать другой набор изображений для просмотра. Это обеспечивает пути для каждого элемента в слайд-шоу. Несмотря на то, что пути могли привести к любому формату файла образа, поддерживаемому 2D Кварцем и Имэдж платформа I/O, включая пути к документам в формате PDF, для этого приложения Вы ограничите режим источника данных изображениями. В этом режиме Имэдж Кит выводит на экран только первую страницу любых документов в формате PDF, смешанных в с изображениями в папке.

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

Когда запущено, простое приложение слайд-шоу дарит пользователю панель Open (диалоговое окно) для выбора папки. Пользователь закрывает слайд-шоу путем щелчка по значку Close, предоставленному средствами управления слайд-шоу, показанными на рисунке 4-1. Пользователь может запустить другой слайд-шоу путем выбора File> Choose Images, представляющий панель Open снова. Когда пользователь выбирает Quit из меню или нажимает Command-Q, приложение слайд-шоу завершается.

Пользовательский интерфейс для этого приложения очень прост — пункт меню Choose Images, который Вы создадите Разработчика Интерфейса использования. Все другие элементы пользовательского интерфейса предоставлены IKSlideshow класс или другие части системы.

Для управления приложением Вы будете использовать NSWindowController класс. Ваш контроллер будет иметь:

  • Непостоянный массив для содержания путей к каждому из элементов в слайд-шоу

  • Экземпляр IKSlideshow класс

Запись простого приложения слайд-шоу

Теперь, когда у Вас есть обзор приложения слайд-шоу, пора записать код. Сначала Вы установите проект XCode, файлы проекта и интерфейс контроллера. Тогда Вы добавите необходимые подпрограммы к файлу реализации. Наконец, Вы создадите пользовательский интерфейс в Интерфейсном Разработчике.

Установка проекта, файлов проекта и интерфейса контроллера

Выполните эти шаги для установки проекта:

  1. Создайте приложение Какао и назовите его Simple Slideshow.

  2. Добавьте Кварцевую платформу к проекту.

    Для получения дополнительной информации посмотрите Используя Набор Изображения в XCode.

  3. Выберите File> New File.

  4. Выберите «Objective-C NSWindowController subclass» и нажмите Далее.

  5. Назовите файл SlideshowController.m и сохраните опцию создать заголовочный файл. Тогда нажмите Finish.

  6. В SlideshowController.h файл, импортируйте Кварцевую платформу путем добавления этого оператора:

    #import <Quartz/Quartz.h>

  7. Добавьте переменную экземпляра для слайд-шоу и непостоянный массив для каналов передачи изображения.

    Интерфейс должен посмотреть следующим образом:

    @interface SlideshowController : NSWindowController {
        IKSlideshow        *mSlideshow;
        NSMutableArray *mImagePaths;
    }
    @end
  8. Сохраните SlideshowController.h файл.

Добавление подпрограмм к файлу реализации

Реализуйте подпрограммы слайд-шоу путем выполнения этих шагов:

  1. Откройтесь SlideshowController.m файл.

  2. В файле реализации добавьте awakeFromNib метод.

    Метод сначала получает совместно используемый экземпляр слайд-шоу. Затем это загружает изображения. Вы запишете loadImages метод и его методы поддержки позже. loadImages метод, в случае успеха, добавит каналы передачи изображения к mImagePaths массив. Если пути добавляются, то awakeFromNib метод выполняет слайд-шоу, с помощью путей в качестве источника данных.

    Следующий awakeFromNib метод устанавливает режим в изображения только. Если существуют документы в формате PDF в каких-либо папках, которые Вы добавляете, Имэдж Кит представляет только первую страницу.

    Обратите внимание на то, что метод не устанавливает опций для слайд-шоу. Однако можно установить любую из опций, указанных константами функциональной клавиши слайд-шоу, определенными в Ссылке класса IKSlideshow.

    - (void)awakeFromNib
    {
         mSlideshow = [IKSlideshow sharedSlideshow];
         [self loadImages];
         if ([mImagePaths count] > 0)
            [mSlideshow runSlideshowWithDataSource:(id<IKSlideshowDataSource>)self
                          inMode: IKSlideshowModeImages
                          options: NULL];
    }
  3. Затем необходимо реализовать два требуемых метода IKSlideshowDataSource Protocol протокол.

    numberOfSlideshowItems метод просто возвращает количество число путей в mImagePaths массив. slideshowItemAtIndex: метод возвращает индекс mImagePaths массив для рассматриваемого элемента.

    - (NSUInteger)numberOfSlideshowItems
    {
     
        return [mImagePaths count];
    }
     
     
    - (id)slideshowItemAtIndex: (NSUInteger)index
    {
       int i;
       i = index % [mImagePaths count];
        return [mImagePaths objectAtIndex: i];
    }
  4. Реализация a loadImages метод.

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

    Затем вызовы метода функция для открытия файлов. Вы запишете эту подпрограмму на следующем шаге. openFiles подпрограмма вызывает панель Open (NSOpenPanel класс) и возвраты массив путей или NULL если пользователь отменяет панель Open. Если существует массив путей, loadImages метод выполняет итерации через пути и вызывает метод addImagesFromPath:, который Вы запишете через мгновение.

    - (void)loadImages
    {
        if (NULL == mImagePaths)
        {
            mImagePaths = [[NSMutableArray alloc] init];
        } else {
          [mImagePaths removeAllObjects];
        }
        NSArray * array = openFiles();
        if (array != NULL)
        {
            NSEnumerator *  enumerator;
            NSString *      path;
     
            enumerator = [array objectEnumerator];
            while (path = [enumerator nextObject])
            {
                    [self addImagesFromPath: path];
            }
        }
    }
  5. Затем необходимо включать openFiles подпрограмма, которую Вы включите SlideshowController.m файл, но до оператора реализации.

    openFiles подпрограмма создает экземпляр NSOpenPanel класс, устанавливает опции позволить пользователю выбирать каталоги, а также файлы, выполняет панель и возвращает или массив имен файлов, выбранных пользователем, или nil если пользователь щелкает по Кнопке отмены.

    static NSArray *openFiles()
    {
        NSOpenPanel *panel;
     
        panel = [NSOpenPanel openPanel];
        [panel setFloatingPanel:YES];
        [panel setCanChooseDirectories:YES];
        [panel setCanChooseFiles:NO];
        int i = [panel runModal];
        if(i == NSOKButton){
            return [panel URLs];
        }
            return nil;
    }
  6. Запишите addImagesFromPath: метод, вызванный loadImages метод.

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

    - (void)addImagesFromPath: (NSString *)path
    {
       NSArray * array  = [[NSFileManager defaultManager]
                       directoryContentsAtPath: path];
     
     
        NSEnumerator *  enumerator;
        NSString *      imagePath;
     
        enumerator = [array objectEnumerator];
        while (imagePath = [enumerator nextObject])
        {
            if ([[[imagePath pathExtension] lowercaseString] isEqualToString: @""])
            {
                 [self addImagesFromPath: [NSString stringWithFormat: @"%@/%@/",
                                           path, imagePath]];
     
          } else
            {
                [mImagePaths addObject: [NSString stringWithFormat: @"%@/%@",
                                         path, imagePath]];
            }
        }
    }
  7. Необходимо записать выбрать метод изображений, вызывающийся, когда пользователь выбирает ту команду.

    Вспомните, что пользователь может остановить слайд-шоу и запустить другого путем выбора File> Choose Images. Вы добавите этот пункт меню и подключение к этому действию позже.

    Этот метод сначала вызывает loadImages метод, чтобы выбрать и добавить новые элементы слайд-шоу. Если существуют элементы для добавления (т.е. пользователь не нажимал Cancel в панели Open), метод перезагружает данные слайд-шоу и затем выполняет слайд-шоу.

    - (IBAction) chooseImages:(id) sender
    {
     
        [self loadImages];
        if ([mImagePaths count] > 0) {
            [mSlideshow reloadData];
            [mSlideshow  runSlideshowWithDataSource: (id<IKSlideshowDataSource>)self
                inMode: IKSlideshowModeImages
                options: NULL];
        }
    }
  8. Сохраните SlideshowController.m файл.

  9. Откройтесь SlideshowController.h файл и добавляет эти объявления метода:

    - (IBAction)chooseImages:(id)sender;
     
    - (NSUInteger)numberOfSlideshowItems;
    - (id)slideshowItemAtIndex: (NSUInteger)index;
    - (void)loadImages;
  10. Сохраните SlideshowController.h файл.

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

Установите пользовательский интерфейс в Интерфейсном Разработчике путем выполнения этих шагов:

  1. Дважды щелкните MainMenu.nib файл для открытия Interface Builder.

  2. Выберите File> Synchronize With Xcode.

  3. Удалите значок окна в окне документа пера.

  4. Дважды щелкните по значку MainMenu в окне документа пера.

  5. Перетащите пункт меню (NSMenuItem) от Библиотеки до меню File и имени элемент Выбирают Images.

  6. Перетащите объект (NSObject) от Библиотеки до окна документа пера.

  7. В инспекторе Идентификационных данных введите SlideshowController в Поле имени. Тогда выберите SlideshowController от всплывающего меню Класса.

  8. Перетащите управление от пункта меню Choose Images до SlideshowController, и в соединениях выбирает панель chooseImages:.

  9. Сохраните файл пера.

  10. В XCode нажмите Build и Go. Тогда протестируйте свое приложение, чтобы удостовериться, что оно работает.

    Вы могли бы получить предупреждения при размещении методов в файл в неправильном порядке.

    Проверьте, чтобы удостовериться, что можно выполнить слайд-шоу. Выйдите из слайд-шоу, и затем запустите другого путем выбора File> Choose Images.