Obj C - как настроить интервал между слайдами с помощью IKSlideShow - PullRequest
0 голосов
/ 11 июня 2010

Я очень плохо знаком с Objective-C и Cocoa, но я сделал простое приложение, которое использует ImageKit для представления слайд-шоу с использованием класса IKSlideShow. Однако я немного застрял с чем-то, что я думал, будет просто. Я хочу увеличить время отображения фотографий на экране во время воспроизведения слайд-шоу, но не вижу, как это сделать эффективно.

Протокол IKSlideshowDatasource позволяет вам делать что-то, когда "slideshowDidChangeCurrentIndex" кажется наилучшим местом для этого - однако я попытался использовать здесь различные задержки, такие как:

while ( functionShouldPause )
    {
        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:20]];
        functionShouldPause=NO;
    }

Однако они не позволяют пользователю вручную перемещаться по слайдам или покидать слайд-шоу.

Очень благодарен за любые предложения. Спасибо!

1 Ответ

0 голосов
/ 26 июня 2010

В случае, если кто-то еще хочет знать, это можно сделать (хотя и не уверен, что я бы порекомендовал мой метод, поскольку он использует частные API).

Если вы используете classdump для извлечения заголовочных файлов для IKSlideShow, и выузнает, что IKSSPanel.h управляет экранными кнопками воспроизведения, паузы и т. д., а IKSlideShowHandler.h - слайд-шоу.Включите оба заголовка в свой проект.

Если вы затем переопределите метод IKSSPanel, вызываемый при нажатии кнопки воспроизведения, вы можете перейти туда и изменить значение autoPlayDelay, управляющее продолжительностью показа слайда, а затем нажатьот слайд-шоу с помощью метода StartAutoPlay обработчика слайд-шоу.

Возможно, есть более чистое решение, но мне кажется, что оно работает хорошо.

#import "IKSSPanelUtils.h"


@implementation IKSSPanel (utils)

- (void)slideshowPlay:(id)sender
{
    NSLog(@"This method overrides the IKSSPanel SlideshowPlay method");
    NSLog(@"Setting the autoPlayDelay to 20 seconds");

    _slideshowHandler.autoPlayDelay=20;
    [_slideshowHandler startAutoPlay];

}
@end
...