2012-05-02 116 views
8

當覆蓋drawRect我發現座標那裏使用0,0作爲左上角。核心圖形座標系

但蘋果的UIView編程指南這樣說:

一些iOS的技術定義默認座標,其原點和取向從那些UIKit的使用不同的系統。例如,Core Graphics和OpenGL ES使用座標系,其原點位於視圖或窗口的左下角,其y軸相對於屏幕向上指向。

我很困惑;當他們提到Core Graphics時,他們是否在談論與Quartz不同的東西?

回答

7

本文檔中的「Core Graphics」表示「Quartz」,是的。這只是一種過度簡單化。

當你創建一個CGContext自己,其座標系統在左下角的原點。當UIKit創建CGContext用於繪製視圖時,它在調用-drawRect:之前有助於翻轉座標系。

2

就座標而言,iOS上的核心圖形和Quartz都是相同的東西。該iOS Technologies Guide是這麼說的:

核芯顯卡(又稱石英)...

Core Graphics框架(CoreGraphics.framework)包含了Quartz 2D繪圖API接口。 Quartz是用於Mac OS X的先進的基於矢量的繪圖引擎。

區別在於,在技術上Quartz是技術或機制,「Core Graphics」是框架。 (在Mac OS上,當然,實際上是一個「石英」的框架,這僅僅是一把傘。)

2

對於其他人發現這個線程的好處:

這裏有座標系的完整說明:Coordinate Systems in Cocoa

這不完全是有益的,它們是不同的。有一些方法可以在應用程序的各種視圖中在座標系之間進行轉換!例如,它會在縮放圖像上的可見屏幕中的(20,20)處找到它的座標。結果是相對於縮放圖像的起源,現在可能在空間中脫離。

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