2017-01-09 2 views
-1

I possède deux modes de réalisation de la même animation d'image-objet:animation lente CADisplayLink dans le simulateur

  1. Un UIImage qui anime un réseau de 6 images en utilisant animatedImage(with:duration:).
  2. UIView
  3. A avec sa propriété de contentsCALayer réglé sur une image de l'image-objet atlas de contentsRect de couche propriété est mise à jour par l'intermédiaire d'un CADisplayLink. Pour assurer l'indépendance du débit d'images, j'accumule le temps delta (ou displayLink.duration) jusqu'à ce qu'une image change. Lorsque l'image change, je soustrais le temps écoulé nécessaire pour une image du temps delta accumulé et le cycle continue.

Les deux méthodes fonctionnent très bien et semblent presque identiques (sinon identiques) sur mon iPhone. Cependant, lors de l'exécution dans Simulator, # 1 semble animer à la vitesse du périphérique, tandis que # 2 semble animer nettement plus lent. Lorsque je compare le FPS de mon appareil et du simulateur, l'appareil affiche une moyenne de 59,9 à 60 FPS, tandis que le simulateur affiche une constante de 60 FPS; ceci ne tient pas compte du # 2 qui semble être sensiblement plus lent. Alors, pourquoi le n ° 2 est-il plus lent dans le simulateur?

Code pour # 1:

UIImage.animatedImage(with: spriteImages, duration: animationDuration) 

Code pour # 2:

func update(_ seconds: TimeInterval) { 
    accumulatedSeconds += seconds 

    // `poseDuration` is `animationDuration/6`. 
    guard accumulatedSeconds >= poseDuration else { return } 

    switch currentFrame { 
    case 6: 
     myView.layer.contentsRect = CGRect(x: 0, y: 0, width: width, height: 1) 
     currentFrame = 1 
    default: 
     myView.layer.contentsRect = CGRect(x: width * Double(currentFrame), y: 0, width: width, height: 1) 
     currentFrame += 1 
    } 

    accumulatedSeconds -= poseDuration 
} 

Répondre

0

Fondamentalement, CADisplayLink ne fonctionne pas bien dans le simulateur. Test sur un appareil uniquement.

+0

Appréciez la confirmation, merci :) Vous ne pouvez pas expliquer pourquoi cela ne fonctionne pas bien? J'essaie juste de comprendre ce qui me manque. – JWK

+0

Vous ne manquez rien. Beaucoup de choses ne fonctionnent pas dans le simulateur. C'est l'un d'eux. – matt

+0

Hah, d'accord. Avez-vous des idées sur pourquoi # 1/'animatedImage (avec: duration:)' ne souffre pas de problèmes de rendu perceptible? Il doit aussi utiliser une sorte de minuterie, non? – JWK