天天看點

iOS開發CoreGraphics核心圖形架構之八——層聚合

 正常情況下,在使用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));

}

運作效果如下圖所示:

iOS開發CoreGraphics核心圖形架構之八——層聚合

從圖中可以發現,所繪制的3個圓形并非是在同一層級上,有時開發者可能需要繪制邊界複雜的圖形,還以上面的例子來說,如果開發者需要繪制某個圖形的邊界是有3個圓形拼接而成,出現這樣的層級效果是不合理的。CoreGraphics架構中也提供了進行圖形聚合繪制的方法,示例如下:

   CGContextBeginTransparencyLayer (myContext, NULL);

   //開啟圖形聚合繪制

   //之後的繪制代碼都将繪制到統一層上

   //結束聚合繪制

   CGContextEndTransparencyLayer (myContext);

效果如下圖所示:

iOS開發CoreGraphics核心圖形架構之八——層聚合

有了聚合繪制這樣的方法,進行複雜圖形的繪制将更加靈活!

繼續閱讀