quartz2D既可以繪制原始圖形,也可以給原始圖形繪制陰影。
繪制陰影時,需要的一些參數:上下文、陰影偏移量、陰影模糊系數
注意:在drawRect:方法中同時調用繪制同一個圖形時,在對繪制的圖形做繪制陰影處理前,需要先對上下文進行保存,繪制陰影成功后,還要對上下文進行復位,還原為最原始的上下文。目的是為了不影響后面的繪圖操作。
舉例的陰影繪制實例如下:
1、自定義一個視圖類DemoView,並將控制器的視圖關聯該自定義類,同時在該定義類中重寫- (void)drawRect:(CGRect)rect,將繪制無陰影圖形和繪制陰影圖形的調用方法寫在里面。
//繪制無陰影圖形和繪制陰影圖形的調用方法
- (void)drawRect:(CGRect)rect { //畫圖形 //1.獲取繪圖的上下文 CGContextRef context = UIGraphicsGetCurrentContext(); //畫帶陰影的矩形 [self drawRectWithShadow:context]; //畫不帶陰影的矩形 [self drawRectWithNoShadow:context]; }
2、具體的繪制代碼如下:
// 繪制無陰影的矩形
#pragma mark -畫不帶陰影的矩形
-(void)drawRectWithNoShadow:(CGContextRef)context { //3.添加矩形 CGContextAddRect(context, CGRectMake(100, 300, 100, 100)); //4.設置繪圖屬性 [[UIColor redColor]setFill]; //填充色 [[UIColor blackColor]setStroke]; //描邊 //5.畫矩形 CGContextDrawPath(context, kCGPathEOFillStroke); }
繪制的無陰影矩形截圖為:
// 繪制帶陰影的矩形
#pragma mark -畫帶陰影的矩形(陰影分為:無顏色(默認的)、有顏色的(設置顏色))
-(void)drawRectWithShadow:(CGContextRef)context { //保存舊的繪圖上下文 CGContextSaveGState(context); //2.設置陰影(參數:上下文、陰影偏移量、陰影模糊系數) //不帶顏色的陰影 //CGContextSetShadow(context, CGSizeMake(10, 10), 10.0); //帶顏色的陰影 CGContextSetShadowWithColor(context, CGSizeMake(10, 10), 10.0,[[UIColor purpleColor]CGColor]); //3.添加矩形 CGContextAddRect(context, CGRectMake(100, 100, 100, 100)); //4.設置繪圖屬性 [[UIColor redColor]setFill]; //填充色 [[UIColor blackColor]setStroke]; //描邊 //5.畫矩形 CGContextDrawPath(context, kCGPathEOFillStroke); //恢復舊的繪圖上下文 CGContextRestoreGState(context); }
繪制的無顏色的陰影圖形和有顏色的陰影圖形截圖為: