2009-06-17 6 views
4

J'ai construit un économiseur d'écran pour Leopard qui utilise l'animation de base. Cela ne fait rien de trop compliqué; utilise un arbre de CALayers et CATextLayers pour produire une « table » de données dans la structure suivante:Animation Jerky/Juttery (Core-) dans un économiseur d'écran?

- root 
    › maincontainer 
    › subcontainer 
     › row [multiple] 
     › cell [multiple] 
      › text layer 

Au plus il y a 50 CALayers rendus à l'écran à tout moment. Une fois que j'ai créé la "table", j'ajoute l'animation du "subcontainer" dans la vue en utilisant CABasicAnimation. Encore une fois, je ne fais rien de fantaisiste - juste un simple fade-in.

Le problème est que pendant que l'animation se produit, c'est pénible à regarder. C'est saccadé sur ma machine de développement qui est un iMac 3.06Ghz avec 4 Go de RAM, et semble couper l'animation en 10 étapes plutôt que de montrer un changement progressif.

Cela empire sur le ppc mac-mini pour lequel l'économiseur d'écran est ciblé; il refuse même de jouer l'animation, en général "tween" depuis le début de l'animation (0% d'opacité) jusqu'à mi-chemin (50%) puis en terminant. Je suis relativement nouveau à ObjectiveC et mon expérience est basée sur l'utilisation d'environnements récupérés, mais je ne peux pas croire que je laisse couler assez de mémoire au moment où l'économiseur d'écran commence à causer de tels problèmes.

En outre, je suis tout à fait sûr que ce n'est pas un problème avec le matériel. J'ai testé les économiseurs d'écran intégrés qui utilisent core-animation, et téléchargé quelques-uns basés sur l'AC libre pour la comparaison, et ils fonctionnent sans problème sur les deux machines.

Les informations concernant l'utilisation de CA dans les écrans de veille ou l'utilisation de CA en général ne sont pas très claires sur Google, et les conseils/tutoriels sur les économiseurs de profils/troublants semblent inexistants. Donc toute aide que la communauté peut fournir serait bien accueillie!

--- MISE À JOUR ---

semble que des animations implicites aider les choses en douceur un peu. Encore un peu saccadé, mais pas aussi mauvais que d'essayer de tout animer avec des animations explicites comme dans ma solution.

Répondre

1

Il n'y a pas grand-chose de spécial à propos d'un économiseur d'écran. Je suppose que vous avez commencé avec le Core Animation Programming Guide? L'utiliser dans les Instruments vous donnera beaucoup d'informations sur l'endroit où vous prenez trop de temps.

Le code que vous utilisez pour faire le fondu d'entrée serait utile. Pour ce que vous décrivez, vous n'avez même pas besoin de CABasicAnimation; vous pouvez simplement définir les propriétés animables des couches, et elles sont animées par défaut. Assurez-vous que vous avez lu sur Implicit Animations. Le reste de cette page est probablement utile aussi.

La plupart de votre travail dans CoreAnimation est en train de disparaître. En général, je sais ce que ça fait, et la plupart des problèmes viennent du fait de le deviner jusqu'à essayer de le dire trop.

Questions connexes