多个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]; 
    } 

希望它能帮助。