Comment puis-je utiliser CALayer avec l'iPhone?
Actuellement, j'ai une sous-classe UIView que "timbres" un seul 2px par 2px CGLayerRef à travers l'écran, jusqu'à 160 x 240 fois.
Je suis actuellement animer en déplaçant la UIView "up" de l'écran de 2 pixels (en fait, une UIImageView) et puis le dessin de la prochaine "ligne".
Serait l'utilisation de plusieurs CALayer couches accélérer les performances de rendu de cette animation?
Sont là des tutoriels, des exemples d'applications ou des extraits de code pour l'utilisation de CALayer avec le SDK de l'iPhone?
La raison pour laquelle je demande, c'est que la plupart des extraits de code, je trouve que de démontrer par des exemples simples de CALayer employer des appels de méthodes qui ne fonctionnent pas avec le SDK de l'iPhone. J'apprécie tous les conseils ou les pointeurs.
OriginalL'auteur Alex Reynolds | 2008-11-03
Vous devez vous connecter pour publier un commentaire.
Bon, eh bien, si vous voulez quelque chose qui a quelques bons exemples de CA bon qui dessine des choses comme ça, et fonctionne sur le téléphone, je recommande la GeekGameBoard code Jens Aflke publié (c'est une version améliorée de certains Apple le code de démonstration).
Basé sur ce que vous décrivez, je pense que vous faites quelque chose de manière plus compliqué qu'il doit être. Mon impression est que vous voulez fondamentalement une vue statique que vous animez en changeant sa position, de sorte qu'il est partiellement hors de l'écran. Si vous avez juste besoin de mettre certaines de contenu statique dans votre drawRect en passant par les couches ne va pas être plus rapide de simplement appeler CGFillRect() avec votre couleur. Après cela, vous pouvez simplement utiliser implicite des animations et de l'animateur de proxy sur UIView pour déplacer la vue. Je soupçonne que vous pourriez même obtenir débarrasser de la coutume drawRect: mise en œuvre avec un motif UIColor, mais honnêtement, j'ai pas comparé la différence entre les deux.
OriginalL'auteur Louis Gerbarg
Ce CALayer méthodes voyez-vous ce qui ne fonctionne pas sur l'iPhone? Outre des fonctions d'animation liée à CoreImage je n'ai pas remarqué beaucoup qui est manquant. La grande chose que vous remarquez, c'est que tous les points de vue sont couche soutenu (si vous n'avez pas besoin de faire quelque chose de spécial à utiliser les calques, il vous suffit de prendre une UIView de la couche à travers la couche accesseurs methos), et le système de coordonnées a un haut à gauche de l'origine.
Dans tous les cas, généralement avoir plus de choses est plus lent que d'avoir moins de choses. Si vous êtes juste de répéter le même schéma encore et encore, vous êtes susceptible de trouver la meilleure performance est à mettre en œuvre une coutume UIView/CALayer/UIColor qui sait dessiner ce que vous voulez, plutôt que de les placer visuellement identiques couches ou des vues de côté les uns des autres.
Après avoir dit que, généralement, les couches sont plus légers que les points de vue, donc, si vous avez beaucoup d'éléments que vous devez garder logiquement séparées, vous trouverez que le passage à couches peuvent être une victoire sur l'utilisation des vues.
Vous voudrez peut-être regarder au -[UIColor initWithPatternImage:] selon exactement ce que vous essayez de faire. Si vous êtes en utilisant deux pixels motif comme une couleur d'arrière-plan, vous pourriez juste faire un UIColor qui l'attire et définir l'arrière-plan.
OriginalL'auteur Louis Gerbarg
Ce CALayer méthodes voyez-vous ce qui ne fonctionne pas sur l'iPhone?
Comme un exemple, j'ai essayé la mise en œuvre de la grille de démonstration ici, sans beaucoup de chance. Il ressemble à
CAConstraintLayoutManager
etCAConstraint
ne sont pas disponibles dansQuartzCore.h
.Dans une autre tentative, j'ai essayé un de très simple, de petites 20x20
CALayer
objet que d'une couche de monUIView
's de la couche de propriété, mais qui ne se présentent pas.Droit maintenant, j'ai une coutume
UIView
de qui je remplace ladrawRect
méthode. DansdrawRect
je prends un contexte et de rendre deux types deCGLayerRef
s:À "off" cellules-je tracer la couleur d'arrière-plan dans l'ensemble de 320x480 toile.
À "sur les" cellules, j'ai tirer un seul
CGLayerRef
à travers une grille de 320x480 pixels (initialisation) ou à travers un 320x2 ligne (animation).Lors de l'animation, je fais un
UIImageView
affichage du clip de 320x478 pixels, et tirer une seule ligne. Ce qui "pousse" mon image bitmap jusqu'à l'écran de deux pixels à la fois.En gros, je voudrais tester si oui ou non à l'aide de
CALayer
permettra d'accomplir deux choses:CALayer
a moins de ressources que ce que je fais maintenantMalheureusement, je n'arrive pas à obtenir une base de CALayer de travail en ce moment, et n'ai pas trouvé une bonne partie de l'exemple de code à regarder et à jouer avec.
OriginalL'auteur Alex Reynolds