Проблема с использованием NSTimer для слайд-шоу - PullRequest
0 голосов
/ 23 сентября 2010

Я пытаюсь создать слайд-шоу с помощью NSTimer ... Но следующий код не прокручивает изображения через равные промежутки времени ...

- (void)tilePages 

{

// Calculate which pages are visible
CGRect visibleBounds = pagingScrollView.bounds;
int firstNeededPageIndex = floorf(CGRectGetMinX(visibleBounds) / CGRectGetWidth(visibleBounds));
int lastNeededPageIndex  = floorf((CGRectGetMaxX(visibleBounds)-1) / CGRectGetWidth(visibleBounds));
firstNeededPageIndex = MAX(firstNeededPageIndex, 0);
lastNeededPageIndex  = MIN(lastNeededPageIndex, [self imageCount] - 1);

// Recycle no-longer-visible pages 
for (ImageScrollView *page in visiblePages) {
    if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) {
        [recycledPages addObject:page];
        [page removeFromSuperview];
    }
}
[visiblePages minusSet:recycledPages];

// add missing pages
for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) {
    if (![self isDisplayingPageForIndex:index]) {
        ImageScrollView *page = [self dequeueRecycledPage];
        if (page == nil) {
            page = [[[ImageScrollView alloc] init] autorelease];
        }
        [self configurePage:page forIndex:index];
        [pagingScrollView addSubview:page];
        [visiblePages addObject:page];

    }


}    

}

В методе ViewWillAppear я использовал ...

timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

и

для вызова события, которое будет запускаться с интервалами, которые я использовал ...

-(void)timerFired:(NSTimer *)timer

{

[self tilePages];

}

Я попытался отладить. Событие запускается через 3 секунды, но tilePages не вызывается. Я использовал то же самое для метода scrollViewDidScroll, где в tilePages выполняется хорошо ... В чем может быть проблема ??? Пожалуйста, помогите ...

1 Ответ

0 голосов
/ 25 октября 2010

Вызов [self tilePages]; не будет показывать новую страницу. Похоже, вы основываете это на примере кода WWDC 2010 для подкачки и масштабирования изображений. Поскольку я знаком с этим кодом, я могу помочь некоторым.

Вы должны создать свой собственный метод, который изменяет фрейм pagingScrollView. Затем вы должны вызвать этот метод из метода timerFired. Замените [self tilePages] на [self changePage] и добавьте следующий код:

-(void)changePage{
   CGRect pageFrame = pagingScrollView.frame;
   pageFrame.size.width -= (2 * 10);
pageFrame.origin.x = (pagingScrollView.frame.size.width * aVariableHoldingTheCurrentPageNumber)+20;
[pagingScrollView scrollRectToVisible:pageFrame animated:YES];
}

По сути, просто рассчитайте фрейм страницы, на который вы хотите перейти, и затем вызовите scrollRectToVisible.

Надеюсь, это поможет.

...