2017-02-04 1 views
1

J'ai fait scrollview pour la collection de quelques images et je veux qu'il défile les images une à une par intervalle de 2 sec. Avec le code ci-dessous, je pourrais faire glisser toutes les images à la fois, mais je veux qu'une image défile, puis une autre en fonction du temps.Comment faire défiler les images une à une par intervalle de 2 secondes, en utilisant Objective C?

-(void)scrollPages{ 

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height)]; 
scrollView.contentSize = CGSizeMake(320, 465); 

[scrollView setScrollEnabled:YES]; 
[scrollView setPagingEnabled:YES]; 
[scrollView setAlwaysBounceVertical:NO]; 
[self.uiSubView addSubview:scrollView]; 

NSMutableArray *arrImage = [NSMutableArray arrayWithObjects:@"a.jpeg", @"cat.jpg", @"s.jpeg",@"ss.jpeg", nil]; 

for (int i = 0; i < [arrImage count]; i++) 
{ 
    CGFloat xOrigin = i * scrollView.frame.size.width; 


    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, scrollView.frame.size.width, scrollView.frame.size.height)]; 
    [imageView setImage:[UIImage imageNamed:[arrImage objectAtIndex:i]]]; 
    [imageView setContentMode: UIViewContentModeScaleAspectFit]; 

    [scrollView addSubview:imageView]; 


} 

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width * [arrImage count], scrollView.frame.size.height)]; 



CGFloat currentOffset = scrollView.contentOffset.x; 

if(currentOffset < 2500){ 

    CGFloat newOffset = currentOffset + 1250; 



    [UIScrollView beginAnimations:nil context:NULL]; 
    [UIScrollView setAnimationDuration:3]; 
    [scrollView setContentOffset:CGPointMake(newOffset,0.0) animated:YES]; 
    } 

Répondre

0

Essayez récursivité simple avec dispatch_after fonction. Quelque chose comme ceci:

-(void)scrollToNextImage{ 
    //place here code for computing and setting scrollview offset 

    _weak typeof(self) weakSelf = self; //for avoiding retain cycle 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [weakSelf scrollToNextImage]; 
    }); 
} 

S'il vous plaît être conscient que, avec ces images de cas défilera même quand viewcontroller disparaîtra. La récursivité se termine uniquement après la fermeture du viewcontroller. Si vous ne voulez pas un tel comportement, vous pouvez ajouter une condition supplémentaire pour vérifier si viewcontroller est visible avant d'envoyer le défilement suivant - vous pouvez vérifier comment faire son par ici: How to tell if UIViewController's view is visible