2017-08-15 1 views
0

Je suis à la recherche d'un moyen de réaliser des animations dessinées par programme, image par image, dans une application MacOs (pas une animation de propriété d'images clés). J'ai essayé de dessiner à CALayer s en utilisant la méthode de délégué drawLayer:inContext:, en appelant setNeedsDisplay pour dessiner chaque image, mais je reçois des performances médiocres le faire de cette façon. Y a-t-il une manière recommandée de faire ce type d'animation dans Cocoa?Animation image par image dans les MacOS

+0

Vous obtenez de mauvaises performances parce que vous ne devez pas faire cela –

Répondre

0

Une bonne façon de réaliser des animations entièrement personnalisées consiste à utiliser CADisplayLink (iOS) ou CVDisplayLink (macOS). CVDisplayLink est fondamentalement une minuterie qui se déclenche aussi souvent que l'affichage se rafraîchit.

Vous pouvez ensuite calculer vos propres fonctions de temporisation en fonction des valeurs que vous obtenez CVDisplayLink. L'API est toujours en C donc c'est un peu lourd à utiliser, surtout dans Swift, mais une fois que vous avez compris comment ça fonctionne, ça fonctionne comme un charme.

J'ai seulement eu de bonnes expériences avec CVDisplayLink, en particulier avec des couches. Ils sont vraiment performants. J'ai été capable d'animer 1000 couches + CVDisplayLink conduit à 60fps sans aucun problème.

Si vous avez besoin d'aide pour utiliser l'API, n'hésitez pas à demander!

Alternative:

Si vous souhaitez utiliser une API plus moderne, je peux recommander SpriteKit. Il y a aussi de belles API d'animation. Et ils se comportent vraiment bien. Apple l'utilise elle-même pour dessiner des vues plus complexes (comme le débogueur de mémoire dans Xcode).