2011-01-23 2 views
16

Lorsque je dessine des lignes et des formes etc, je reçois le "contexte graphique actuel" dans iOS.iOS "contexte graphique actuel" - Qu'est-ce que

Qu'est-ce exactement que "contexte graphique actuel" - Je suis à la recherche de la description de 30 000 pieds.

En ce moment, je copie et colle simplement le code de l'interface utilisateur, je ne sais pas exactement ce qu'il fait.

+1

Je ne suis pas vraiment sûr de ce qu'est une "description de 30 000 pieds". Voulez-vous dire une explication très complète et détaillée? Voici [la documentation d'Apple sur le contexte graphique] (http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202 -TPXREF131). –

+5

Une "vue de 30 000 pieds" est également connue sous le nom de "the big picture". À 30 000 pieds au-dessus de la terre, de nombreux détails sur le sol sont obscurs à l'œil nu. Voir aussi la 4ème entrée dans le top résultat de Google pour "30000 expression vue du pied": http://askthemanager.com/2008/11/the-25-most-annoying-business-phrases/ –

+0

Pour une explication claire de la vue large, essayez ceci ... http://stackoverflow.com/questions/4775594/what-is-a-graphic-context-ios/4776606#4776606 – Fattie

Répondre

15

Le système d'exploitation a besoin d'un endroit pour enregistrer des informations, telles que l'état de dessin, que vous ne voulez pas spécifier dans chaque dessin CG commande, comme dans quel bitmap ou vue afficher, l'échelle ou autre transformation à utiliser, la dernière couleur que vous avez spécifiée, etc.

Le contexte indique à chaque appel CG où trouver toutes ces «choses» pour votre dessin actuel appel. Donner un contexte différent au même appel de dessin, et cet appel peut dessiner à un bitmap différent dans une vue complètement différente, avec une couleur différente, échelle différente, etc

1

Fondamentalement, c'est une classe dans une plate-forme (iOS, Android, JavaME et beaucoup d'autres) qui donne accès à toutes les fonctionnalités de dessin/affichage fournies pour cette plate-forme. Il varie un peu pour différentes plates-formes bien sûr, mais c'est la description de 30.000 pieds :)

+0

FYI, sur iOS, les fonctions relatives à l'obtention du contexte graphique actuel sont simplement des fonctions de référence UIKit, pas des "classes". ;) –

+0

Je ferais aussi référence à un "contexte" en tant qu '"état" plus qu'à une "classe". Une classe peut être une façon de l'implémenter, cependant. –

16

Un contexte graphique est l'endroit où les informations sur le l'état de dessin est stocké. Cela inclut la couleur de remplissage, la couleur de contour, la largeur de ligne, la courbe, le masque, le chemin courant, les calques de transparence, la transformation, la transformation de texte, etc. Cela signifie que vous pouvez utiliser plusieurs contextes à la fois, bien que généralement vous n'en utilisiez qu'un seul. Au niveau de la couche UIKit, il y a le concept de contexte graphique «actuel», qui est un contexte graphique utilisé par tous les appels de dessin au niveau UIKit (tels que le dessin -[UIColor set] ou UIBezierPath). Le contexte actuel est stocké dans une pile de contextes, de sorte que vous pouvez créer un nouveau contexte pour un dessin, puis lorsque vous avez terminé, le contexte précédent est restauré. Typiquement, vous obtenez un contexte gratuit à l'intérieur de -[UIView drawRect:] à l'intérieur des méthodes liées à l'affichage CALayer, mais pas autrement.

Autrefois, le contexte «courant» était un état global à l'échelle de l'application, et il n'était donc pas sûr de toucher en dehors du thread principal. Depuis iOS 4.0 (je crois), ceci est devenu un état local et les méthodes de dessin au niveau UIKit sont devenues sûres à utiliser sur les threads d'arrière-plan.

+0

Qu'est-ce que vous voulez dire que nous obtenons un contexte gratuitement à l'intérieur de drawRect? – mskw

+0

@mskw: Cela signifie qu'à l'intérieur de '-drawRect:', les frameworks ont déjà configuré un contexte graphique et l'ont défini comme le "contexte actuel", ainsi vos commandes de dessin UIKit fonctionneront sans se soucier des contextes. En dehors de '-drawRect:' ce n'est généralement pas vrai. –

+0

Mais vous devez toujours appeler la fonction UIGraphicsBeginImageContextWithOptions correctement? – mskw

Questions connexes