2010-01-06 3 views
3

J'ai sous-classe UIView - en fait une pièce de puzzle - avec 2 CGLayer différent initialisé à initWithFrame.Définir "opacité" d'un CGLayer avant le tirage?

En drawRect je dois mélange cette couche deux, et le plus haut devrait avoir variable alpha selon le jeu logique.

Quelle est la meilleure façon de procéder pour optimiser les performances? Existe-t-il une fonction CGLayer ou CGContext qui définit un alpha avant le dessin?

Répondre

6

Définissez le -opacity de la couche. N'oubliez pas que le paramètre -opaque de la couche doit être NON. La valeur par défaut est NON, mais elle est généralement définie sur OUI pour des raisons de performances. Si vous faites déjà -drawInContext:, vous pouvez tester CGContextSetAlpha(). Généralement, cependant, vous n'utilisez pas -drawRect: et les calques en même temps. Vous laissez généralement la vue ou les calques faire le dessin.

+0

Vous voulez dire que je devrais créer un indépendant, par exemple. - (void) renderView méthode, et mettre en œuvre des dessins de couche là-bas? Ensuite, [puzzlePiece setNeedDisplay] pourrait être remplacé par un [puzzlePiece renderView] simple? – Geri

+0

Cela semble à peu près juste, si vous avez besoin de rendre toutes les pièces de la vue à chaque fois. Sinon, je ne ferais que ré-afficher les couches dont vous avez besoin lorsque votre classe de modèle (données) change. Il n'y a aucune raison de redessiner une couche juste parce que d'autres couches doivent être redessinées. –

+0

'Cours. Les pièces de puzzle sont en fait attribuées/addSubview-ed instances d'une classe PuzzlePiece: UIView, donc seule la pièce récemment manipulée par l'utilisateur reçoit le message redraw (renderView ci-dessus "signifie" renderPuzzleView). – Geri