2011-01-23 15 views
16

Cuando dibujo líneas y formas, etc. obtengo el "contexto gráfico actual" en iOS.iOS "contexto actual de gráficos" - ¿Qué es eso

¿Qué es exactamente el "contexto actual de gráficos"? Estoy buscando la descripción de 30,000 pies.

Ahora solo copio y pego el código de UI, no estoy muy seguro de lo que está haciendo.

+1

No estoy seguro de qué es una "descripción de 30,000 pies". ¿Te refieres a una explicación muy completa y detallada? Aquí está [la documentación de Apple sobre el contexto de los gráficos] (http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202 -TPXREF131). –

+5

Una "vista de 30,000 pies" también se conoce como "la gran imagen". A 30,000 pies sobre la tierra, muchos detalles en el suelo son oscuros a simple vista. Consulte también la 4ª entrada en el resultado superior de Google para "frase de vista de 30000 pies": http://askthemanager.com/2008/11/the-25-most-annoying-business-phrases/ –

+0

Para una explicación clara de la vista amplia, intente esto ... http://stackoverflow.com/questions/4775594/what-is-a-graphic-context-ios/4776606#4776606 – Fattie

Respuesta

15

El sistema operativo necesita un lugar para guardar información, como el estado del dibujo, que no desea especificar en cada dibujo de CG comando, como en qué mapa de bits o vista dibujar, la escala u otra transformación para usar, el último color que especificó, etc.

El contexto le dice a cada llamada CG dónde encontrar todo este "material" para su dibujo actual llamada. Proporcione un contexto diferente a la misma llamada de dibujo, y esa llamada podría dibujar a un mapa de bits diferente en una vista completamente diferente, con un color diferente, una escala diferente, etc.

1

Básicamente es una clase en una plataforma (iOS, Android, JavaME y muchos otros) que proporciona acceso a todas las capacidades de dibujo/visualización proporcionadas para esa plataforma. Varía un poco para diferentes plataformas, por supuesto, pero esta es la descripción de 30,000 pies :)

+0

FYI, en iOS, las funciones relacionadas con obtener el contexto gráfico actual son simplemente funciones de referencia de UIKit, no "clases". ;) –

+0

También me referiría a un "contexto" como un "estado" más que a una "clase". Sin embargo, una clase puede ser una forma de implementarlo. –

16

Un contexto de gráficos es el lugar donde se encuentra la información el estado de dibujo se almacena. Esto incluye color de relleno, color de trazo, ancho de línea, patrón de línea, regla de bobinado, máscara, ruta actual, capas de transparencia, transformación, transformación de texto, etc. Al usar las llamadas a CoreGraphics, especifica el contexto que se utilizará para cada función. Esto significa que puede usar múltiples contextos a la vez, aunque normalmente solo usa uno. En la capa UIKit, existe el concepto de un contexto de gráficos "actual", que es un contexto de gráficos que es utilizado por todas las llamadas de dibujo a nivel de UIKit (como el dibujo -[UIColor set] o UIBezierPath). El contexto actual se almacena en una pila de contextos, por lo que puede crear un nuevo contexto para un dibujo, y cuando termina con él se restaura el contexto anterior. Normalmente se obtiene un contexto gratis dentro de -[UIView drawRect:] dentro de los métodos relacionados con la visualización de CALayer, pero no de otra manera.

Solía ​​ser que el contexto "actual" era un estado global de toda la aplicación y, por lo tanto, no era seguro tocarlo fuera del hilo principal. A partir de iOS 4.0 (creo), esto se convirtió en un estado local de subprocesos y los métodos de dibujo de nivel UIKit se convirtieron en seguros para usar en subprocesos de fondo.

+0

¿Qué quiere decir que tenemos un contexto de forma gratuita cuando dentro drawRect? – mskw

+0

@mskw: Significa que dentro de '-drawRect:', los marcos ya han configurado un contexto de gráficos y lo configuran como el "contexto actual", de modo que los comandos de dibujo de UIKit funcionarán sin preocuparse por los contextos. Fuera de '-drawRect:' eso no suele ser cierto. –

+0

Pero aún necesita llamar a la función UIGraphicsBeginImageContextWithOptions ¿verdad? – mskw

Cuestiones relacionadas