2010-09-23 17 views
0

Je suis en train de créer un diaporama en utilisant NSTimer ... Mais le code suivant ne défile pas les images à intervalles réguliers ...Problème d'utilisation NSTimer pour le diaporama

- (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]; 

    } 


}  

}

Dans la méthode viewWillAppear j'ai utilisé ...

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

et

pour appeler l'événement à être déclenché à des intervalles que j'ai utilisé ...

-(void)timerFired:(NSTimer *)timer 

{

[self tilePages]; 

}

j'ai essayé de débogage. L'événement est déclenché à 3 secondes, mais le fichier tilePages n'est pas appelé. J'ai utilisé la même chose pour la méthode scrollViewDidScroll où dans le tilePages est bien exécuté ... Quel pourrait être le problème ??? S'il vous plaît aider ...

+0

* "mais les tuilesPages ne sont pas appelées" * - avez-vous vérifié cela en utilisant les points de rupture de traçage ou de traçage? –

+0

Ya ... j'ai utilisé le point d'arrêt pour vérifier que ... le programme entre dans la méthode après 3 secondes mais il n'est pas exécuté ... Le même code est exécuté quand la méthode scrollViewDidScroll est appelée ... est "[[ auto tilePages]; " code assez pour obtenir un diaporama ... ??? –

Répondre

0

Appel [auto tilePages]; ne montrera pas une nouvelle page. Il semble que vous vous basiez sur l'exemple de code WWDC 2010 pour les images de pagination et de zoom. Parce que je connais ce code, je pourrais peut-être vous aider.

Vous devez créer votre propre méthode qui modifie l'image de pagingScrollView. Ensuite, vous devriez appeler cette méthode à partir de la méthode timerFired. Remplacer [auto tilePages] avec [auto changePage] et ajoutez le code suivant:

-(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]; 
} 

Fondamentalement juste calculer le cadre de la page que vous voulez faire défiler et puis appeler scrollRectToVisible.

J'espère que cela aide.