如何从CALayer中切出一个缺口?

时间:2011-10-20 11:33:00

标签: iphone objective-c ios core-animation

我在旋转木马中有一组视图,每个视图都使用CAGradientLayer作为背景。旋转木马坐在带纹理的背景上。我被要求提供背景,以三角形显示所选视图。我不能只使用带有背景纹理的三角形图像,因为它不一定与主背景匹配。我想从当前视图的背景中切出一个凹口,以便通过凹口可以看到带纹理的背景。

我应该怎么做?是否可以制作多边形层?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我认为我们不能绘制多边形图层。但是,我相信可以通过两种不同的方式实现预期结果: -

  1. 如果您的图片尺寸相同,那么您可以使用中间有透明凹口的PNG图像(或根据您的需要在外面)。

  2. 绘制填充矩形和透明三角形多边形。然后你需要交叉多边形(矩形和三角形)。结果形状应放在旋转木马图像上。此方法的好处是,您可以根据需要动态更改多边形的大小和形状。

  3. 希望这有帮助!

答案 2 :(得分:-3)

是否可以制作多边形图层?

没有

我应该怎么做?

使用一个掩码 - 一个与你的图层大小相同但有一点切出的png图像 - 这会使CALayer看起来有一个切块。 (但是,如果切断很大,情况就不会如此,你可能会让用户试图触摸它背后的任何东西,这将无效!)。

有关详细信息,请参阅documentation(并搜索stackoverflow)。