多个bezierpaths掩蔽视图的路径
问题描述:
如何在单个视图中绘制多个遮罩层,这里是我使用的代码,但只有一个遮罩层正在工作其余路径删除。 一次传递一个路径,并在循环中调用它只是保持最后一个路径掩码删除其余的。多个bezierpaths掩蔽视图的路径
- (void)setClippingPath:(UIBezierPath *)clippingPath andView:(UIView *)view;
{
if (![[view layer] mask])
[[view layer] setMask:[CAShapeLayer layer]];
[(CAShapeLayer*) [[view layer] mask] setPath:[clippingPath CGPath]];
}
答
我在一些研究后解决了你的问题。我确实如下。首先我宣布一个实例变量UIBezierPath *resultingPath
。这个变量将被用于你的方法来追加传入的路径。
- (void)setClippingPath:(UIBezierPath *)clippingPath andView:(UIView *)view;
{
if (![[view layer] mask]) {
[[view layer] setMask:[CAShapeLayer layer]];
}
if (resultingPath) {
[resultingPath appendPath:clippingPath];
[(CAShapeLayer*) [[view layer] mask] setPath:[resultingPath CGPath]];
}
}
我测试了这个,它工作!
如果你喜欢TOR重置人,经过一番研究,我发现这个解决方案:
- (IBAction)resetMask:(id)sender {
UIBezierPath *hole = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self setClippingPath:hole andView:[self view]];
resultingPath = [UIBezierPath bezierPath];
}
希望它能帮助。