Comment ajouter un CALayer à un NSView sur Mac OS X
Je suis en train d'apprendre à utiliser et à mettre en œuvre CALayer
dans un Mac Objective-C application, mais je n'arrive pas à probablement le plus simple - ajouter un nouveau calque et définir sa couleur de fond/taille de l'image. Quelqu'un peut-il voir quel est le problème avec mon code?
CALayer *layer = [CALayer layer];
[layer setFrame:CGRectMake(0, 0, 100, 100)];
[layer setBackgroundColor:CGColorCreateGenericRGB(1.0, 0.0, 0.0, 1.0)];
[self.layer addSublayer:layer];
[layer display];
J'ai mis cela dans la - (void)drawRect:(NSRect)rect
méthode de ma coutume NSView
sous-classe, mais quand je lance l'application, ça montre une vue vierge, avec pas de couleur de fond, ou la preuve de la couche que j'ai créé.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous ne voulez pas d'ajouter une couche dans la
drawRect:
méthode de vue, ce qui est appelé automatiquement par le système et vous auriez probablement jusqu'à la fin avec beaucoup plus de couches que vous voulez vraiment.initWithFrame:
ouinitWithCoder:
(pour les vues qui sont dans un fichier nib) sont de meilleurs endroits pour initialiser votre hiérarchie de couches.En outre,
NSView
s n'avez pas de racine, couche par défaut (ce qui est assez différent deUIView
sur iOS). Il existe essentiellement deux types deNSView
s qui utilisent une couche: couche-soutenu points de vue et couche-hébergement points de vue. Si vous souhaitez interagir avec la couche directement (ajouter des sous-couches, etc.), vous avez besoin pour créer une couche-hébergement vue.Pour ce faire, créer un
CALayer
et l'appel de la vuesetLayer:
méthode. Par la suite, appelezsetWantsLayer:
. L'ordre est important, si vous souhaitez appelersetWantsLayer:
tout d'abord, vous fait créer une couche adossés à vue.Vous avez besoin de faire un appel à la "setWantsLayer" la méthode.
Consultez les documents suivants pour la description pour setWantsLayer:
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html
En un mot, votre vue doit être couche-hébergement de vue. Parce que c'est une couche d'hébergement de vue, vous devez interagir avec la couche, et de ne PAS interagir avec la vue elle-même et ne pas ajouter des sous-vues à elle.
Mettre ce de l'drawRect. J'ai l'habitude de mettre ma couche de configuration dans la méthode init ou le viewDidLoad.
Contraire à tout moment la vue est tiré d'une nouvelle couche est ajoutée et alloué. Aussi, je n'ai jamais utilisé l'affichage de couches] de la ligne avant. Les docs en fait vous dire de ne pas appeler cette méthode directement.