2015-11-16 1 views
5

Donc, je veux animer un UIImageView sur un écran de chargement et on m'a dit que la méthode intégrée "animationImages" prend beaucoup de mémoire et est une mauvaise programmation, donc je ne vais pas utiliser ça, j'ai aussi eu des problèmes avec ça mais c'est à part ça.ImageView animation, bouclage à travers les images

Le code ci-dessous fonctionne presque mais il s'anime trop vite même si je mets 3 secondes.

func animate() { 

    UIView.animateWithDuration(3, animations: {() -> Void in 

     self.logoImageView.image = UIImage(named: "00") 
     self.logoImageView.image = UIImage(named: "02") 
     self.logoImageView.image = UIImage(named: "03") 
     self.logoImageView.image = UIImage(named: "04") 
     self.logoImageView.image = UIImage(named: "05") 
     self.logoImageView.image = UIImage(named: "06") 
     self.logoImageView.image = UIImage(named: "07") 
     self.logoImageView.image = UIImage(named: "08") 
     self.logoImageView.image = UIImage(named: "09") 
     self.logoImageView.image = UIImage(named: "10") 
     self.logoImageView.image = UIImage(named: "11") 
     self.logoImageView.image = UIImage(named: "12") 
     self.logoImageView.image = UIImage(named: "13") 
     self.logoImageView.image = UIImage(named: "14") 
     self.logoImageView.image = UIImage(named: "15") 
     self.logoImageView.image = UIImage(named: "16") 
     self.logoImageView.image = UIImage(named: "17") 
     self.logoImageView.image = UIImage(named: "18") 
     self.logoImageView.image = UIImage(named: "19") 
     self.logoImageView.image = UIImage(named: "20") 
     self.logoImageView.image = UIImage(named: "21") 
     self.logoImageView.image = UIImage(named: "22") 
     self.logoImageView.image = UIImage(named: "23") 
     self.logoImageView.image = UIImage(named: "24") 
     self.logoImageView.image = UIImage(named: "25") 
     self.logoImageView.image = UIImage(named: "26") 

     }) { (success) -> Void in 

      self.fadeInLabel() 
    } 

Cependant, le code ci-dessous ici se fane dans l'étiquette de bienvenue et fonctionne très bien donc je me demande ce que le problème avec ce qui précède est. Merci pour l'aide!

func fadeInLabel() { 

    UIView.animateWithDuration(2, animations: {() -> Void in 

     self.labelImageView.alpha = 1 

     }) { (success) -> Void in 

      self.performSelector("pushToCreateVC", withObject: self, afterDelay: 1) 
    } 

} 
+0

La méthode de minuterie mentionnée ci-dessus est meilleure, mais pas toute l'histoire: http://stackoverflow.com/a/34232973/763355 – MoDJ

Répondre

3

Si tu veux animer des images u peut utiliser animationImages propriété de UIImageView

self.logoImageView.animationImages = imagesListArray; 
self.logoImageView.animationDuration = 3.0 
self.logoImageView.startAnimating() 

imagesListArray est un tableau d'images u Animez

OU

Si vous voulez animer l'im âges avec animation personnalisée vous pouvez utiliser le code ci-dessous où j'ai utilisé l'option d'animation UIViewAnimationOptionTransitionFlipFromLeft.Belowcode est en Obj-C, j'espère que vous pouvez mapper la sémantique.

// in view Load 
_slide = 0 
[self changeSlide]; 

// Loop gallery 
NSTimer *timer = [NSTimer timerWithTimeInterval:5.0f target:self selector:@selector(changeSlide) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 


- (void)changeSlide 
{ 

if(_slide > _galleryImages.count-1) _slide = 0; 

UIImage *toImage = [UIImage imageNamed:_galleryImages[_slide]]; 
[UIView transitionWithView:_yourimageView 
       duration:0.6f 
       options:UIViewAnimationOptionTransitionFlipFromLeft 
      animations:^{ 
       _yourimageView.image = toImage; 

      } completion:nil]; 
_slide++; 

} 
0

J'ai rencontré un problème avec la méthode animationImages qui a ramené imageView à l'image d'origine à la fin. Je ne suis pas sûr s'il y a un meilleur moyen, mais j'ai fini par utiliser une minuterie pour que imageView garde la dernière image une fois complète.

var counter = 0 
var timer = NSTimer() 
@IBAction func countButton(sender: UIButton) { 

    timer.invalidate() 
    timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "timerAction", userInfo: nil, repeats: true) 

} 

func timerAction() { 
    ++counter 
    switch counter{ 
    case 1 : 
     image1.image = UIImage(named:"Bird-1.gif") 
    case 2 : 
     image1.image = UIImage(named:"Bird-2.gif") 
    case 3 : 
     image1.image = UIImage(named:"Bird-3.gif") 
    case 4 : 
     image1.image = UIImage(named:"Bird-4.gif") 
    case 5 : 
     image1.image = UIImage(named:"Bird-5.gif") 
    case 6 : 
     counter = 0 
     timer.invalidate() 
    default : 
     print("Error") 
    } 
}