正常状况下,在使用CoreGraphics框架中的方法进行图形绘制时,每一闭合的图形都是一个独立的层,若是在绘制时添加了阴影效果,则经过阴影能够很明显的看到图形的分层状况,后绘制的图形在上层,先绘制的图形在下层,示例代码以下:框架
-(void)drawRect:(CGRect)rect{ float width = rect.size.width/2; CGPoint center = CGPointMake(rect.size.width/2, rect.size.height/2); CGSize myShadowOffset = CGSizeMake (10, -20); CGContextRef myContext = UIGraphicsGetCurrentContext(); //设置阴影 CGContextSetShadow (myContext, myShadowOffset, 10); //绘制三个圆形 CGContextSetRGBFillColor (myContext, 0, 1, 0, 1); CGContextFillEllipseInRect(myContext, CGRectMake(center.x-width/2, center.y-width/4*3, width, width)); CGContextSetRGBFillColor (myContext, 0, 0, 1, 1); CGContextFillEllipseInRect(myContext, CGRectMake(center.x-width/4, center.y-width/4, width, width)); CGContextSetRGBFillColor (myContext, 1, 0, 0, 1); CGContextFillEllipseInRect(myContext, CGRectMake(center.x-width/4*3, center.y-width/4, width, width)); }
运行效果以下图所示:spa
从图中能够发现,所绘制的3个圆形并不是是在同一层级上,有时开发者可能须要绘制边界复杂的图形,还以上面的例子来讲,若是开发者须要绘制某个图形的边界是有3个圆形拼接而成,出现这样的层级效果是不合理的。CoreGraphics框架中也提供了进行图形聚合绘制的方法,示例以下:code
-(void)drawRect:(CGRect)rect{ float width = rect.size.width/2; CGPoint center = CGPointMake(rect.size.width/2, rect.size.height/2); CGSize myShadowOffset = CGSizeMake (10, -20); CGContextRef myContext = UIGraphicsGetCurrentContext(); CGContextSetShadow (myContext, myShadowOffset, 10); CGContextBeginTransparencyLayer (myContext, NULL); //开启图形聚合绘制 //以后的绘制代码都将绘制到统一层上 CGContextSetRGBFillColor (myContext, 0, 1, 0, 1); CGContextFillEllipseInRect(myContext, CGRectMake(center.x-width/2, center.y-width/4*3, width, width)); CGContextSetRGBFillColor (myContext, 0, 0, 1, 1); CGContextFillEllipseInRect(myContext, CGRectMake(center.x-width/4, center.y-width/4, width, width)); CGContextSetRGBFillColor (myContext, 1, 0, 0, 1); CGContextFillEllipseInRect(myContext, CGRectMake(center.x-width/4*3, center.y-width/4, width, width)); //结束聚合绘制 CGContextEndTransparencyLayer (myContext); }
效果以下图所示:ip
有了聚合绘制这样的方法,进行复杂图形的绘制将更加灵活!开发
专一技术,热爱生活,交流技术,也作朋友。class
——珲少 QQ群:203317592iOS开发