2013-06-21 4 views
1

J'ai un ensemble de 4 images que je veux montrer dans un UIScrollView. Cette vue de défilement contient des bannières publicitaires. Donc, ils doivent continuer à défiler verticalement automatiquement, comme l'effet de sélection - l'utilisateur n'a pas besoin de toucher l'écran pour faire défiler. Ce processus devrait continuer à se répéter.IOS Scrollview Marquee style

Si l'utilisateur touche l'écran, le défilement doit s'arrêter & lorsque l'utilisateur touche à nouveau l'écran, le défilement doit reprendre à partir de l'endroit où il avait quitté.

+1

tout ce que vous avez essayé? S'il vous plaît donner extrait de votre code que vous avez essayé? –

+1

vous devez mélanger la pagination avec le temps https://code.google.com/p/iphone-infinite-horizontal-scroller/ utiliser minuterie avec elle pour faire défiler automatique – amar

Répondre

1

Voici comment je l'ai fait finalement :-).
Appelez la méthode ci-dessous de viewDidLoad

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(scrollTheScrollView) userInfo:nil repeats:YES]; 

maintenant la méthode mettre en œuvre

-(void)scrollTheScrollView{ 

static int i=0; 

i++; 

if(self.scrollView.contentOffset.y == 700.0)//This 700.0 will be different for you 
    i=0; 

NSLog(@"Content offset in scrolling method is %@",self.scrollView); 

[self.scrollView setContentOffset:CGPointMake(0, i*5)];} 
+0

Mettre la dernière ligne: 'setContentOffset' sous l'animation' UIView' aidera également le défilement lisse. –

1

Il est aussi simple, je suppose. UIImageView peut vous aider. Procédez comme suit:

1) Ajoutez 4 UIImageView s verticalement vers le bas.

2) Créez 4 tableaux différents pour ces images.

NSArray *frames1 = [NSArray arrayWithObjects:[UIImage imageWithName:@"a.png"],[UIImage imageWithName:@"b.png"],[UIImage imageWithName:@"c.png"],[UIImage imageWithName:@"d.png"],nil]; 
NSArray *frames2 = [NSArray arrayWithObjects:[UIImage imageWithName:@"b.png"],[UIImage imageWithName:@"c.png"],[UIImage imageWithName:@"d.png"],[UIImage imageWithName:@"a.png"],nil]; 
NSArray *frames3 = [NSArray arrayWithObjects:[UIImage imageWithName:@"c.png"],[UIImage imageWithName:@"d.png"],[UIImage imageWithName:@"a.png"],[UIImage imageWithName:@"b.png"],nil]; 
NSArray *frames4 = [NSArray arrayWithObjects:[UIImage imageWithName:@"d.png"],[UIImage imageWithName:@"a.png"],[UIImage imageWithName:@"b.png"],[UIImage imageWithName:@"c.png"],nil]; 

3) Fournir ces tableaux à tous ces différents ImageViews.

yourImageView1.animationImages = frames1; 
yourImageView2.animationImages = frames2; 
yourImageView3.animationImages = frames3; 
yourImageView4.animationImages = frames4; 

4) Vous pouvez ajouter des effets aussi ...

// all frames will execute in 1.75 seconds 
yourImageView.animationDuration = 1.75; 
// repeat the annimation forever 
yourImageView.animationRepeatCount = 0; 

5) Simply startAnimating les ImageViews.

[yourImageView1 startAnimating]; 
[yourImageView2 startAnimating]; 
[yourImageView3 startAnimating]; 
[yourImageView4 startAnimating]; 

6) Vous pouvez toujours utiliser la méthode -touchesEnded pour démarrer et arrêter l'animation.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    if ([[touches anyObject] view] == yourImageView1) { 
     //Here you can write the code to stop and start Animation of UIImageView 
    } 
} 

Je pense que cela vous donnera l'effet que vous voulez.

GoodLuck !!!

+1

Nice .. grande logique.! +1 pour cela. Mais je doute que cela donnerait le même effet de chapiteau ?! Peut être que ce sera mais ...... Hv vous avez essayé le code –

+0

Merci Vin.Le code est bon. Je l'ai essayé mais ça ne donne pas l'effet de chapiteau. –

+0

@Priyanshu: Je n'ai pas essayé. Mais je suis tout à fait sûr, une certaine personnalisation peut fournir cet effet (Si vous comprenez vraiment la logique derrière cela). – Bhavin