2010-11-19 13 views
0

Je suppose que ce problème concerne vraiment la performance, mais j'essaie d'obtenir une vérification approximative.iPhone: animation vectorielle

J'affiche une vue de carte (bien que ce soit une vue de carte ou quelque chose d'autre pourrait changer, et j'espère est immatériel), et au-dessus de la vue de carte j'ai une sous-classe de vue transparente. Dans la méthode drawRect: de cette vue, je dessine sur la vue en utilisant des appels graphiques principaux; Les cercles, les dégradés, etc. Ce que je dessine n'est pas super compliqué, mais ce n'est pas trivial. Ensuite, j'ai un NSTimer qui se déclenche toutes les X secondes, en appelant [myview setNeedsDisplay] à chaque fois, et ce qu'il dessine change à chaque pas de temps (les cercles grossissent, les couleurs et les dégradés changent, etc.).

Est-ce la bonne façon de faire ce type d'animation vectorielle? Je reçois très faible performance X semble être effectivement pas mieux que d'environ 0,25. Je voudrais 0,05 ou plus petit. Y a-t-il un autre moyen de faire les choses? J'ai le sentiment que je suis stratégiquement loin, ou c'est futile. Je peux faire des choses avec CoreAnimation - par exemple développer et réduire les images et autres, et c'est très rapide (pourquoi?), Mais cela ne me donne pas le contrôle que je veux ...

PLUS D'INFO: réduire la complexité du dessin (moins de cercles, de gradients, etc.) accélère significativement le dessin, mais je dois presque rien dessiner pour obtenir une animation fluide. Cette stratégie NSTimer est-elle la bonne solution? Existe-t-il un autre moyen d'animer le dessin vectoriel?

+0

Il serait utile pour les gens qui essaient de lire votre question si vous formatez le code correctement (en ce cas, en l'entourant en arrière). Voir http://daringfireball.net/projects/markdown/syntax. –

+0

duplication possible de [dessin animé Optimiser graphique Core (iPhone)] (http://stackoverflow.com/questions/3310883/optimize-core-graphics-animated-drawing-iphone) –

+0

oh, ce lien est vraiment utile. Merci! – Colin

Répondre

0

Est-il possible que vous puissiez tirer parti de certaines animations de base pour effectuer certaines/toutes les animations? Par exemple, plutôt que de redessiner un cercle dont la taille change, il suffit de le rendre en une seule taille et d'animer une transformation d'échelle. Si vous n'avez qu'un couple d'objets à animer, vous pouvez essayer d'ajouter chacun d'entre eux en tant que sous-calque de votre vue, puis regrouper certaines animations d'animation de base plutôt que d'essayer de tout redessiner manuellement. Si vous regardez les cercles bleus dans l'application Cartes d'Apple, quand ils rayonnent vers l'extérieur (tout en obtenant une solution), vous pouvez voir qu'ils commencent à être nets et deviennent un peu flous à mesure qu'ils grandissent. Cela fonctionne bien dans ce but, et je soupçonne qu'ils ne font que mettre à l'échelle une petite image circulaire. Est-ce que ce genre de chose fonctionnerait pour votre application?

Il est difficile de dire ce qui peut améliorer les performances sans avoir une meilleure idée des animations que vous effectuez. Est-ce quelque chose que vous pourriez élaborer?

(j'aurais posté cela comme un commentaire, mais je suis un peu moins de la réputation nécessaire pour cela)

+0

Donc, malheureusement, je pense que c'est la bonne réponse. Je l'ai fait - des choses prérendues, puis animées avec CoreAnimation. Je peux l'obtenir pour faire la plupart de ce que je veux, et c'est vraiment lisse. Je dis malchance, car il semble vraiment y avoir un moyen de faire de l'animation vectorielle. Tant pis. – Colin