我在旋转木马中有一组视图,每个视图都使用CAGradientLayer作为背景。旋转木马坐在带纹理的背景上。我被要求提供背景,以三角形显示所选视图。我不能只使用带有背景纹理的三角形图像,因为它不一定与主背景匹配。我想从当前视图的背景中切出一个凹口,以便通过凹口可以看到带纹理的背景。
我应该怎么做?是否可以制作多边形层?
答案 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)
我认为我们不能绘制多边形图层。但是,我相信可以通过两种不同的方式实现预期结果: -
如果您的图片尺寸相同,那么您可以使用中间有透明凹口的PNG图像(或根据您的需要在外面)。
绘制填充矩形和透明三角形多边形。然后你需要交叉多边形(矩形和三角形)。结果形状应放在旋转木马图像上。此方法的好处是,您可以根据需要动态更改多边形的大小和形状。
希望这有帮助!
答案 2 :(得分:-3)
是否可以制作多边形图层?
没有
我应该怎么做?
使用一个掩码 - 一个与你的图层大小相同但有一点切出的png图像 - 这会使CALayer看起来有一个切块。 (但是,如果切断很大,情况就不会如此,你可能会让用户试图触摸它背后的任何东西,这将无效!)。
有关详细信息,请参阅documentation(并搜索stackoverflow)。