iOS開發UI篇—Quartz2D使用(矩陣操做)

 

iOS開發UI篇—Quartz2D使用(矩陣操做)c#

1、關於矩陣操做blog

1.畫一個四邊形ip

經過設置兩個端點(長和寬)來完成一個四邊形的繪製。開發

代碼:it

 1 - (void)drawRect:(CGRect)rect
 2 {
 3     //畫四邊形
 4     //獲取圖形上下文
 5     CGContextRef ctx=UIGraphicsGetCurrentContext();
 6     //繪圖
 7     CGContextAddRect(ctx, CGRectMake(20, 50, 100, 100));
 8     //渲染
 9     CGContextStrokePath(ctx);
10 }

說明:經過這種方式畫矩形有弱點:畫出來的矩形永遠都是正的。以下圖:class

2.畫一個歪的四邊形iOS開發

如何畫一個歪的矩形?(經過矩陣操做來完成,和形變操做類似)bfc

能夠經過矩陣操做,把畫出來的東西進行形變(旋轉,縮放,平移)渲染

方法:CGContextRotateCTM(<#CGContextRef c#>, <#CGFloat angle#>)該接受兩個參數(圖形上下文,弧度)scroll

注意點:設置矩陣操做必需要在添加圖形以前,若是設置在添加圖形以後的話,此時它已經畫完了,無效。

代碼:

 1 - (void)drawRect:(CGRect)rect
 2 {
 3     //畫四邊形
 4     //獲取圖形上下文
 5     CGContextRef ctx=UIGraphicsGetCurrentContext();
 6     //矩陣操做
 7     //注意點:設置矩陣操做必需要在添加繪圖信息以前
 8     //旋轉45度
 9     CGContextRotateCTM(ctx, M_PI_4);
10     
11     //繪圖
12     CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13     //渲染
14     CGContextStrokePath(ctx);
15 }

view之因此可以顯示視圖,是由於它的上面有layer,未來圖形也是渲染到layer上面。

且,旋轉的時候是整個layer都旋轉了,能夠再畫一個圓進行驗證。

代碼1(未旋轉):

 1 - (void)drawRect:(CGRect)rect
 2 {
 3     //獲取圖形上下文
 4     CGContextRef ctx=UIGraphicsGetCurrentContext();
 5     //矩陣操做
 6     //注意點:設置矩陣操做必需要在添加繪圖信息以前
 7     //旋轉45度
 8     //    CGContextRotateCTM(ctx, M_PI_4);
 9     
10     //繪圖
11     //畫四邊形
12     CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13     //畫一個圓
14     CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15     //渲染
16     CGContextStrokePath(ctx);
17 }

 效果:

代碼2(旋轉):

 1 - (void)drawRect:(CGRect)rect
 2 {
 3     //獲取圖形上下文
 4     CGContextRef ctx=UIGraphicsGetCurrentContext();
 5     //矩陣操做
 6     //注意點:設置矩陣操做必需要在添加繪圖信息以前
 7     //旋轉45度
 8     CGContextRotateCTM(ctx, M_PI_4);
 9     
10     //繪圖
11     //畫四邊形
12     CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13     //畫一個圓
14     CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15     //渲染
16     CGContextStrokePath(ctx);
17 }

效果:

2.關於旋轉的補充說明

提示:旋轉的時候,是整個layer都旋轉了。

3、縮放

方法:CGContextScaleCTM(<#CGContextRef c#>, <#CGFloat sx#>, <#CGFloat sy#>)

該方法接收三個參數(圖形上下文,x方向的縮放比例,y方向上的縮放比例

代碼示例:

 1 - (void)drawRect:(CGRect)rect
 2 {
 3     //獲取圖形上下文
 4     CGContextRef ctx=UIGraphicsGetCurrentContext();
 5     //矩陣操做
 6     //注意點:設置矩陣操做必需要在添加繪圖信息以前
 7     //縮放,x方向縮放0.5倍,y方向縮放1.5倍
 8     CGContextScaleCTM(ctx, 0.5, 1.5);
 9     
10     //繪圖
11     //畫四邊形
12     CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13     //畫一個圓
14     CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15     //渲染
16     CGContextStrokePath(ctx);
17 }

 效果:

4、平移

方法: CGContextTranslateCTM(<#CGContextRef c#>, <#CGFloat tx#>, <#CGFloat ty#>)

該方法接收三個參數(圖形上下文,x方向的偏移量,y方向上的偏移量)   

代碼示例:

 1 - (void)drawRect:(CGRect)rect
 2 {
 3     //獲取圖形上下文
 4     CGContextRef ctx=UIGraphicsGetCurrentContext();
 5     //矩陣操做
 6     //注意點:設置矩陣操做必需要在添加繪圖信息以前
 7     //平移,x方向移動50,y方向移動100
 8     CGContextTranslateCTM(ctx, 50, 100);
 9     
10     //繪圖
11     //畫四邊形
12     CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13     //畫一個圓
14     CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15     //渲染
16     CGContextStrokePath(ctx);
17 }

效果:

提示:座標原點爲view的左上角。

相關文章
相關標籤/搜索