2012-07-31 18 views
8

在我的實驗,我斷定這些:CGAffineTransform轉去錯誤的方式

YourView.transform = CGAffineTransformMakeRotation(positive value); 

將視圖順時針旋轉,並且

YourView.transform = CGAffineTransformMakeRotation(Negative value); 

將逆時針旋轉視圖,

但文件說:

角度,以弧度爲單位,旋轉仿射變換R M。在iOS中,正值指定逆時針旋轉,負值指定順時針旋轉。

那些矛盾與對方?

+0

我測試了它,現在我得到了相同的結果。文檔確實指出在OSX中它有這種行爲。但不是像你說的ios,非常奇怪。 – Pochi 2012-07-31 02:34:37

+0

你的「價值」是π/ 2嗎? – 2012-07-31 03:07:33

+0

@ibeitia:是的,我嘗試了π/ 2和-π/ 2 – romox 2012-07-31 03:30:02

回答

23

你的困惑是完全可以理解的。

實際上,正角表示從正X軸向正Y軸的旋轉。負角表示從正X軸朝向負Y軸的旋轉。

「原生」Core Graphics座標系建模在標準Cartesian coordinate system之後,其中Y軸在頁面上向上增加向上。在這個系統中,正角度表示逆時針旋轉:

normal coordinate system

所以,如果你創建自己的CGContext(例如,通過使用CGBitmapContextCreateCGPDFContextCreate),旋轉會像您期望的工作。

但是,計算機系統歷史上使用座標系,其中Y軸在頁面上向下增加向下。在這樣的翻轉座標系中,正角度表示順時針旋轉:

flipped coordinate system

注意,在兩個座標系,正角度朝向正Y軸的正X軸旋轉。

事實證明,UIKit翻轉它爲您創建的圖形上下文的座標系。這包括它在發送drawRect:之前設置的圖形上下文以及它在UIGraphicsBeginImageContext中設置的圖形上下文。 (Quartz 2D Programming Guide解釋了這一點。)您可以通過查看當前的變換矩陣(使用CGContextGetCTM)來檢查這一點。您會發現它的d元素中有一個-1,這意味着Y軸被翻轉。

A UIView也使用翻轉座標系來佈置其子視圖,這會影響屬性的含義。

+0

thx很多,很感激! – romox 2012-07-31 04:15:47

+1

,但在這樣的翻轉座標系中,正角表示順時針旋轉,但文檔中提到「在iOS中,正值指定逆時針旋轉。」所以我認爲它仍然是矛盾的。文件是否錯誤? – romox 2012-07-31 09:14:59

+0

有時候是錯的。這取決於您使用變換的上下文。 – 2012-07-31 19:11:28