2009-05-25 4 views
0

J'utilise un IBoutlet pour obtenir une référence à une sous-vue que j'ai ajoutée à la vue principale dans le générateur d'interface mais cela ne me donne pas accès à drawRect: Je ne serai pas en mesure d'obtenir un contexte sur lequel s'appuyer. Est-ce que de toute façon je peux toujours obtenir le contexte graphique pour pouvoir dessiner sur la sous-vue? Comment pourrais-je m'y prendre?iPhone doit obtenir une référence de contexte CGContextRef pour une sous-vue

+1

Les vues n'ont pas de contexte. Un contexte est créé pour eux quand '-drawRect:' est appelé, mais en dehors des limites de '-drawRect:' aucun contexte n'existe. –

Répondre

3

Vous ne pouvez pas dessiner comme ça; vous devez dessiner en réponse à un appel drawRect, pas à n'importe quel moment car certains cadres le permettent.

La manière correcte de le faire est: créer une sous-classe UIView dans Xcode. Passez à Interface Builder, sélectionnez votre sous-vue, et changer son "Identité de classe" (sous "Outils> Inspecteur d'identité") pour le nom de votre nouvelle sous-classe.

Ensuite, dans votre sous-classe, vous pouvez implémenter drawRect.

0

Vous ne devriez jamais dessiner dans une autre vue, même pas une sous-vue. La sous-vue doit se dessiner et avoir accès à son propre contexte graphique. Vous ne pouvez pas accéder au contexte d'une autre vue. ils sont gérés par le framework et sont configurés avant d'appeler le -drawRect: pour la vue appropriée.

1

Techniquement, il existe un moyen pour qu'un objet devienne le délégué de dessin d'un autre via la route view.layer.delegate. On peut construire un délégué pour mettre en œuvre

  • (void) drawLayer: (CALayer *) Couche inContext: (CGContextRef) CTX

Cela vous donne la possibilité de réutiliser des instructions de dessin si cela devenait nécessaire. Mais il peut être fastidieux de lire et de comprendre pour un autre programmeur. La plupart l'éviteraient à moins d'éliminer la duplication du code.

Questions connexes