2011-10-20 47 views
5

我在旋轉木馬中有一組視圖,每個視圖都使用CAGradientLayer作爲背景。旋轉木馬坐在帶紋理的背景上。我被要求背景在三角形中顯示選定的視圖。我不能只使用具有背景紋理的三角形圖像,因爲它不一定與主背景相匹配。我想從當前視圖的背景中切出一個凹槽,以便通過凹槽可以看到帶紋理的背景。我如何從CALayer中切出一個凹槽?

我應該怎麼辦?可以製作多邊形圖層嗎?

回答

10

我發現我可以使用CAShapeLayer做到這一點:

CAShapeLayer *mask = [[[CAShapeLayer alloc] init] autorelease]; 
mask.frame = backgroundLayer.bounds; 
mask.fillColor = [[UIColor blackColor] CGColor]; 

CGFloat width = backgroundLayer.frame.size.width; 
CGFloat height = backgroundLayer.frame.size.height; 

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, nil, 0, 0); 
CGPathAddLineToPoint(path, nil, width, 0); 
CGPathAddLineToPoint(path, nil, width, height); 
CGPathAddLineToPoint(path, nil, (width/2) + 5, height); 
CGPathAddLineToPoint(path, nil, width/2, height - 5); 
CGPathAddLineToPoint(path, nil, (width/2) - 5, height); 
CGPathAddLineToPoint(path, nil, 0, height); 
CGPathAddLineToPoint(path, nil, 0, 0); 
CGPathCloseSubpath(path); 

mask.path = path; 
CGPathRelease(path); 

backgroundLayer.mask = mask; 
-3

是否可以製作多邊形圖層?

我應該如何去嗎?

使用一個蒙版 - 一個與您的圖層大小相同的png圖像,但有一點點刪除 - 這將使CALayer看起來有一塊被刪除。 (但是,如果您的切出點很大,您可能會嘗試觸摸它後面的任何內容,這不會起作用!)。

查看documentation(和搜索stackoverflow)瞭解更多詳情。

+0

我真的不能用一個PNG面具 - 的觀點是動態調整大小。 – Simon

+0

使用Quartz繪圖API動態製作你的蒙版 - http://www.codeproject.com/KB/iPhone/iOSGetStarted01.aspx – deanWombourne

+0

這實際上是一個合法的答案,因爲圖層本身總是一個矩形(Apple的文檔),所以一個.png圖像是一個可行的解決方案。 –

0

我不認爲我們可以繪製多邊形圖層。但是,我認爲,預期的結果可以用兩種不同的方式來實現: -

  1. 如果您的圖片大小相同的,那麼你可以在兩者之間用一個PNG圖像與透明的缺口(或外部按你慾望)。

  2. 繪製一個填充矩形和透明三角形多邊形。然後你需要交叉多邊形(矩形和三角形)。結果形狀應放置在傳送帶圖像上。這種方法的好處是,如果需要,您可以動態更改多邊形的大小和形狀。

希望這有助於!

相關問題