2013-06-19 1 views
0

J'ai un UIView dans lequel je dessine des choses dans la méthode drawRect. Je voudrais superposer un calayer sur le CALayer UIView (self.layer) qui dessinerait un sous-ensemble des choses que je dessine dans le drawRect. Fondamentalement, je dessine beaucoup de cercles dans drawRect, et je voudrais en souligner quelques-uns sur la superposition. Je reçois les coordonnées des cercles d'un objet modèle qui est une propriété de l'UIView.Comment implémenter drawLayer: InContext dans le fichier d'implémentation d'un UIView?

Ma première tentative a été d'ajouter une sous-couche s à la couche UIView, a fixé son délégué à la UIView et appeler sa méthode setNeedsDisplay en cas de besoin, mais drawLayer:InContext est appelé par les deux couches (s et self.layer). Cela ne fonctionne pas:

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { 
    if (layer == s) { 
    // draw stuffs for s 
    } 
    else if (layer==self.layer) { 
    // do nothing 
    } 
} 

donne un UIView noir. Je voudrais dessiner s à partir d'un endroit où j'ai accès à mon modèle de données, et d'autres variables utiles pour le dessin (largeur des lignes ..). J'ai résolu le problème en déplaçant le dessin de s vers un objet séparé, mais cela m'oblige à définir également un pointeur du modèle dans cet objet et à copier d'autres paramètres.

Donc ma question est: dans un UIView dessiner son contenu en utilisant drawRect, comment ajouter une sous-couche dont le délégué est le même UIView?

Répondre

1

Vous devez sous-classer UIView et dans cette sous-classe remplacer + (Class)layerClass avec votre propre sous-classe CALayer. Alors que UIView utilisera cette sous-classe quand il crée sa couche de support. Votre sous-classe CALayer aurait alors un remplacement pour drawLayer.

Vous pouvez placer cette sous-classe CALayer (interface et implémentation) dans votre sous-classe UIView.

Questions connexes