Différences entre les performances d'un iPhone en ce qui concerne le dessin au quartz et les images précuites au four (ce qui, je suppose, simplifie l'utilisation du quartz ou du quartz)

StackOverflow https://stackoverflow.com/questions/1604341

Question

Je suis nouveau chez Quartz et je suis curieux des vitesses de dessin des formes simples, des dégradés et des ombres; Comparaison spécifique des fonctions de dessin Quartz et des images Quartz sur iPhone.

Dites que je dois dessiner un rectangle rempli, tracé et ombragé. Je suppose que importer un rectificateur précuit au format PNG et le dessiner à l'aide de drawInRect: ou drawAtPoint: est plus rapide que d'utiliser les fonctions de dessin de Quartz pour dessiner la même chose, car cette dernière nécessite des calculs explicites. D'autre part, dessiner une image, je suppose, augmente l'utilisation de la mémoire et la taille de l'application, car je dois importer l'image, puis l'allouer. Cela vous semble-t-il correct?

En outre, existe-t-il de gros avantages / inconvénients pour l'une ou l'autre technique? Très familiarisé avec les programmes graphiques et connaissant très bien Quartz, j'essaie de décider s'il est avantageux d'utiliser les fonctions de dessin dans mon code, par opposition à la pré-cuisson de l'interface utilisateur complète et à l'importation des images.

Était-ce utile?

La solution

J'avais une question similaire, alors j'ai temporisé les différentes approches. Dans la plupart des cas de dessin simples (comme votre exemple de rectangle), le chargement d'une image à partir d'un disque semblait légèrement plus lent que le dessin, peut-être en raison de l'accès au disque requis. Dans ces cas-là, j'ai opté pour les routines de dessin Quartz, simplement en raison de la souplesse dont ils disposent. Si je souhaite modifier la taille d'un élément d'interface utilisateur à l'avenir (afin de prendre en charge un affichage de résolution supérieure ou supérieure), je devrai rendre à nouveau toutes mes images, où les dessins vectoriels seront redimensionnés en fonction des besoins.

Un domaine dans lequel j'ai constaté une nette amélioration des performances est celui d'un large dégradé radial que je dessine en arrière-plan. Dans Shark, je pouvais constater que l’appel CGContextDrawRadialGradient () occupait beaucoup de temps processeur. Lorsque j'ai remplacé le dégradé radial dessiné au quartz par une image statique, j'ai constaté une réduction notable du temps de démarrage de l'application (cet arrière-plan est placé lors du démarrage de l'application). Bizarrement, j’ai également constaté une réduction de l’utilisation de la mémoire d’application d’environ 0,5 Mo, ce que je ne saurais expliquer en détail.

Si vous souhaitez tester cela vous-même, je vous recommande vivement de choisir l'éditeur de photos Opacity , qui peut générer Code Quartz pour un dessin (y compris une sous-classe UIView ou CALayer complète), ainsi que la sortie d’un fichier PNG de ce même dessin. Il est donc simple d’implémenter les deux chemins dans votre application et de les tester.

Autres conseils

En fonction de la structure de votre application, vous pouvez également trouver un moyen terme: implémentez le code de dessin, mais dessinez dans un calque, puis réutilisez-le. Cela présente l'avantage de ne pas augmenter le temps de calcul du processeur plus d'une fois, tout en maintenant le processus de dessin dynamique.

Ainsi, disons, lorsque la tablette sera enfin livrée (n'importe quel jour maintenant!), vous pouvez retravailler un peu vos paramètres de dessin pour couvrir tous les périphériques possibles, plutôt que de générer plusieurs images statiques différentes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top