I possède deux modes de réalisation de la même animation d'image-objet:animation lente CADisplayLink dans le simulateur
- Un
UIImage
qui anime un réseau de 6 images en utilisantanimatedImage(with:duration:)
. - A avec sa propriété de
contents
CALayer
réglé sur une image de l'image-objet atlas decontentsRect
de couche propriété est mise à jour par l'intermédiaire d'unCADisplayLink
. Pour assurer l'indépendance du débit d'images, j'accumule le temps delta (oudisplayLink.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.
UIView
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
}
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
Vous ne manquez rien. Beaucoup de choses ne fonctionnent pas dans le simulateur. C'est l'un d'eux. – matt
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