2012-05-02 9 views
8

Al anular drawRect He encontrado que las coordenadas allí usan 0,0 como la esquina superior izquierda.Core Graphics sistema de coordenadas

pero la programación de Apple UIView guía dice esto:

Algunas tecnologías iOS definen por defecto sistemas cuyo punto de origen y orientación diferir de los utilizados por UIKit coordenada. Por ejemplo, Core Graphics y OpenGL ES usan un sistema de coordenadas cuyo origen se encuentra en la esquina inferior izquierda de la vista o ventana y cuyo eje y apunta hacia arriba en relación con la pantalla.

Estoy confundido; ¿Están hablando de algo diferente a Quartz cuando se refieren a Core Graphics aquí?

Respuesta

7

"Gráficos básicos" en esta documentación significa "Cuarzo", sí. Es solo una simplificación excesiva.

Cuando crea un CGContext usted mismo, su sistema de coordenadas tiene el origen en la esquina inferior izquierda. Cuando UIKit crea el CGContext para dibujar en una vista, voltea útilmente el sistema de coordenadas antes de llamar al -drawRect:.

2

Core Graphics y Quartz en iOS son, en lo que respecta a las coordenadas, lo mismo. El iOS Technologies Guide dice así:

núcleo gráfico (también conocido como cuarzo) ...

El marco núcleo de gráficos (CoreGraphics.framework) contiene las interfaces de la API de dibujo Quartz 2D. El cuarzo es el mismo motor de dibujo avanzado, basado en vectores que se utiliza en Mac OS X.

La distinción es que, técnicamente, el cuarzo es la tecnología o el mecanismo, y "núcleo gráfico" es el nombre de la marco de referencia. (En Mac OS, por supuesto, de hecho hay un marco "cuarzo", que es sólo un paraguas.)

2

Para el beneficio de los demás para encontrar este hilo:

Hay una explicación completa de los sistemas de coordenadas aquí : Coordinate Systems in Cocoa

No es exactamente útil que difieran. ¡Hay métodos para convertir entre sistemas de coordenadas en los distintos niveles de vista en su aplicación! Por ejemplo, esto encuentra las coordenadas del punto que está en (20,20) en la pantalla visible en una imagen ampliada. El resultado es relativo al origen de la imagen ampliada que ahora puede estar muy lejos en el espacio.

croppingFrame.origin = [self convertPoint:CGPointMake(20.0, 20.0) fromCoordinateSpace:(self.window.screen.fixedCoordinateSpace)]; 
Cuestiones relacionadas