我在旋轉木馬中有一組視圖,每個視圖都使用CAGradientLayer作爲背景。旋轉木馬坐在帶紋理的背景上。我被要求背景在三角形中顯示選定的視圖。我不能只使用具有背景紋理的三角形圖像,因爲它不一定與主背景相匹配。我想從當前視圖的背景中切出一個凹槽,以便通過凹槽可以看到帶紋理的背景。我如何從CALayer中切出一個凹槽?
我應該怎麼辦?可以製作多邊形圖層嗎?
我在旋轉木馬中有一組視圖,每個視圖都使用CAGradientLayer作爲背景。旋轉木馬坐在帶紋理的背景上。我被要求背景在三角形中顯示選定的視圖。我不能只使用具有背景紋理的三角形圖像,因爲它不一定與主背景相匹配。我想從當前視圖的背景中切出一個凹槽,以便通過凹槽可以看到帶紋理的背景。我如何從CALayer中切出一個凹槽?
我應該怎麼辦?可以製作多邊形圖層嗎?
我發現我可以使用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;
是否可以製作多邊形圖層?
號
我應該如何去嗎?
使用一個蒙版 - 一個與您的圖層大小相同的png圖像,但有一點點刪除 - 這將使CALayer看起來有一塊被刪除。 (但是,如果您的切出點很大,您可能會嘗試觸摸它後面的任何內容,這不會起作用!)。
查看documentation(和搜索stackoverflow)瞭解更多詳情。
我不認爲我們可以繪製多邊形圖層。但是,我認爲,預期的結果可以用兩種不同的方式來實現: -
如果您的圖片大小相同的,那麼你可以在兩者之間用一個PNG圖像與透明的缺口(或外部按你慾望)。
繪製一個填充矩形和透明三角形多邊形。然後你需要交叉多邊形(矩形和三角形)。結果形狀應放置在傳送帶圖像上。這種方法的好處是,如果需要,您可以動態更改多邊形的大小和形狀。
希望這有助於!
我真的不能用一個PNG面具 - 的觀點是動態調整大小。 – Simon
使用Quartz繪圖API動態製作你的蒙版 - http://www.codeproject.com/KB/iPhone/iOSGetStarted01.aspx – deanWombourne
這實際上是一個合法的答案,因爲圖層本身總是一個矩形(Apple的文檔),所以一個.png圖像是一個可行的解決方案。 –