原文請參考。以下並非完全的翻譯,而是以我自己的角度理解並且整理的結果。另外太簡單的我就不寫在內了。
Quartz 2D drawing model定義了兩個分開的座標空間(coordinate spaces):
預設的user space可以透過CTM (current transformation matrix)來調整。當你創建一個graphic context後,CTM會是 identity matrix。可以使用Quartz transformation functions去調整CTM來改變在user space上的繪圖結果。
Quartz 2D API提供了一些函數讓你取得和修改CTM,你可以做到下列這些行為:
可使用的函數有:
另外還有反矩陣:
CGAffineTransformIsIdentity可檢查一個affine transform是否是identity matrix
Quartz 2D drawing model定義了兩個分開的座標空間(coordinate spaces):
- user space
- device space
預設的user space可以透過CTM (current transformation matrix)來調整。當你創建一個graphic context後,CTM會是 identity matrix。可以使用Quartz transformation functions去調整CTM來改變在user space上的繪圖結果。
About Quartz Transformation Functions
CTM代表著user space和device space之間的轉換矩陣(或是映射、函數)。Quartz 2D API提供了一些函數讓你取得和修改CTM,你可以做到下列這些行為:
- rotate
- scale
- translate
- concatenate:連接上述幾個的結果
Modifying the Current Transformation Matrix
簡單說呢,就是直接操作CTM,透過下面三個函數,不過這樣講可能有點模糊,就是你可以直接針對著context的CTM調整,和下面諸如CGAffineTransformMakeTranslation之類的差異在於,後者是先建立好一個CGAffineTransform,然後之後才套用在transform上,前者是立即的使用,當你呼叫並執行的時候就立刻的改變了device space上呈現的結果了。可使用的函數有:
- CGContextTranslateCTM
- CGContextRotateCTM
- CGContextScaleCTM
Creating Affine Transforms
你可以先建好一些affine transform matrices等待之後用於CTM上。相關的函數有以下六個,基本上只有三種功能:- CGAffineTransformMakeTranslation
- CGAffineTransformMakeRotation
- CGAffineTransformMakeScale
- CGAffineTransformTranslate
- CGAffineTransformRotate
- CGAffineTransformScale
另外還有反矩陣:
- CGAffineTransformInvert
- CGPointApplyAffineTransform
- CGSizeApplyAffineTransform
- CGRectApplyAffineTransform
- CGAffineTransformMake
Evaluating Affine Transforms
可以用CGAffineTransformEqualToTransform來檢查兩個affine transform是否相同。CGAffineTransformIsIdentity可檢查一個affine transform是否是identity matrix
留言
張貼留言