2012-07-20 3 views
3

J'ai un gros retard dans l'animation de ma vue d'image.Retard dans l'animation des images

Je crée une application basée sur la navigation.

Dans viewDidLoad de mon troisième contrôleur de vue, j'ai créé une vue d'image et l'ai ajouté comme sous-vue.

self.myImageView = [[UIImageView alloc]initWithFrame:CGRectMake(259, 46, 496, 470)]; 
self.myImageView.image = [UIImage imageNamed:@"foo.png"]; 
[self.view addSubview:self.myImageView]; 

et sur un clic de bouton je veux passer myImageView d'une animation à l'autre.

Il y a deux tableaux d'animations et je suis initialisé dans viewDidLoad mais il faut un peu de temps pour appeler [self.myImageView startAnimating]; pour la première fois.

sur mon CLICK i mon point de vue d'animer l'image comme ci-dessous:

self.myImageView.animationImages = self.openAnimationArray; 
    [self.myImageView startAnimating]; 
    self.myImageView.animationRepeatCount = 0; 

sur la presse suivante bouton i animé de la même ImageView avec un autre ensemble de tableau images.

self.myImageView.animationImages = self.closeAnimationArray; 
[self.myImageView startAnimating]; 
self.myImageView.animationRepeatCount = 0; 

Mon premier problème était le retard lors de la navigation à mon troisième point de vue de l'ordre controller.In pour éviter ce retard i initialisés et stocké le closeAnimationArray et openAnimationArray dans l'application délégué [UIApplication sharedApplication] .delegate.

Je rencontre ce retard uniquement lors de la première navigation vers le troisième contrôleur. Je pense que cela peut être dû à la mise en cache des images, il n'y a pas de retard dans la deuxième fois navigation.UIImage imageNamed fonction en cache les images. Donc, pour éviter le retard de la première navigation, je charge les images de l'application Delegate elle-même.

NSArray * openAnimationArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"],[UIImage imageNamed:@"2.png"],[UIImage imageNamed:@"3.png"],[UIImage imageNamed:@"4.png"],[UIImage imageNamed:@"5.png"], nil]; 
    for (id object in openAnimationArray) 
    { 

     [object forceLoad]; 

    } 

Méthode pour le chargement de force est donnée ci-dessous:

- (void) forceLoad 
{ 
    const CGImageRef cgImage = [self CGImage]; 

    const int width = CGImageGetWidth(cgImage); 
    const int height = CGImageGetHeight(cgImage); 

    const CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage); 
    const CGContextRef context = CGBitmapContextCreate(
                 NULL, 
                 width, height, 
                 8, width * 4, 
                 colorspace, kCGImageAlphaNoneSkipFirst); 

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage); 
    CGContextRelease(context); 
} 

Mais il y a encore un retard dans la première fois animation.It affecte ma performance d'application très mal. Comment puis-je résoudre ce problème.

+0

Voir http://stackoverflow.com/a/17225223/763355 – MoDJ

Répondre

0

Essayez ceci:

NSArray * openAnimationArray = [NSArray arrayWithObjects:[UIImage initWithContentsOfFile:@"1.png"],[UIImage initWithContentsOfFile:@"2.png"],[UIImage initWithContentsOfFile:@"3.png"],[UIImage initWithContentsOfFile:@"4.png"],[UIImage initWithContentsOfFile:@"5.png"], nil]; 

UIImage initWithContentsOfFile:@"2.png"] est plus rapide que [UIImage imageNamed:@"2.png"]. Parce qu'il charge les images sans cache.

+0

Cela fonctionne pour moi. utilisez 'initWithContentsOfFile' comme ce [lien] (http://stackoverflow.com/questions/7525348/uiimage-initwithcontentsoffile-doesnt-work) – Kerberos