展示效果:
請問:實現的步驟是什么?
第一步,首先繪制一個線條,一個橢圓,和一個矩形框,然后添加到路徑中,進行渲染.
第二步豪椿,進行仿射變化.特別注意:仿射變化應該在拿到上下文之后立即編寫代碼,然后再進行繪制操作.不然就沒有效果了.
第三步座慰,需求:最后再繪制一個圓,這個圓的寬度是默認的,顏色也是默認的,并且不要做任何形變操作.因此我們需要在最開始對圖形上下文的狀態(tài)進行備份.將狀態(tài)先備份到“圖形上下文椏跤啵”中,然后再進行下一個路徑繪制時,先取出保存在圖形上下文棧的狀態(tài).最后來繪制.
//代碼實現
------------------------------ HMRootView.m------------------------------
- (void)drawRect:(CGRect)rect {
// 1.獲取圖形上下文
CGContextRefctx =UIGraphicsGetCurrentContext();
//在對圖形上下文的狀態(tài)進行任何操作之前,先備份一份到"圖形上下文棧"中
CGContextSaveGState(ctx);
/*****拿到上下文后立刻做仿射變換,然后再開始繪圖操作*****/
//縮放
CGContextScaleCTM(ctx,0.5,0.5);
//旋轉
CGContextRotateCTM(ctx,M_PI_4*0.5);
//平移
CGContextTranslateCTM(ctx,150,100);
// 2.創(chuàng)建路徑對象
// 2.1畫線
UIBezierPath*pathLine = [UIBezierPathbezierPath];
[pathLinemoveToPoint:CGPointMake(50,50)];
[pathLineaddLineToPoint:CGPointMake(250,150)];
// 2.2畫橢圓
UIBezierPath*pathOval = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(30,200,250,80)];
// 2.3繪制一個矩形
UIBezierPath*pathRect = [UIBezierPathbezierPathWithRect:CGRectMake(150,50,50,200)];
//把路徑添加到上下文中
CGContextAddPath(ctx, pathLine.CGPath);
CGContextAddPath(ctx, pathOval.CGPath);
CGContextAddPath(ctx, pathRect.CGPath);
//設置顏色
[[UIColorredColor]set];
//設置線寬
CGContextSetLineWidth(ctx,20);
//設置線頭樣式
CGContextSetLineCap(ctx,kCGLineCapRound);
// 3.渲染
CGContextDrawPath(ctx,kCGPathStroke);
/*****需求:最后再繪制一個圓唾戚,這個圓的線寬是默認的浸踩,顏色也是默認的扳肛,并且不要做任何形變操作*****/
//從上下文棧中獲取上次保存的狀態(tài)
CGContextRestoreGState(ctx);
UIBezierPath*pathCircle = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(80,100,200,200)];
CGContextAddPath(ctx, pathCircle.CGPath);
CGContextDrawPath(ctx,kCGPathStroke);
}