2013-05-27 82 views
4

我想成立UIBezierPath为蒙了我的观点: 的目标是这样的: enter image description hereBezierPath和掩蔽

所以,我得出与框架视图:

CGFloat round = 80; 
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(self.frame.size.width/2-105, 0, 210, 60+round)]; 
myView.backgroundColor = [UIColor redColor]; 

然后再试试添加BezierMask:

UIBezierPath *aPath = [UIBezierPath bezierPath]; 

CGSize viewSize = CGSizeMake(myView.frame.size.width, myView.frame.size.height); //(210,80) 
CGPoint startPoint = CGPointMake(myView.frame.origin.x,myView.frame.origin.y); //(279,0) 

[aPath moveToPoint:startPoint]; //(279,0) 

[aPath addLineToPoint:CGPointMake(startPoint.x+viewSize.width,startPoint.y)]; //(489,0) 
[aPath addLineToPoint:CGPointMake(startPoint.x+viewSize.width,startPoint.y+viewSize.height-round)]; //(489,60) 
[aPath addQuadCurveToPoint:CGPointMake(startPoint.x,startPoint.y+viewSize.height-round) controlPoint:CGPointMake(startPoint.x+(viewSize.width/2),80)]; //(279,60) : (384,80) 

[aPath closePath]; 

CAShapeLayer *layer = [CAShapeLayer layer]; 
layer.frame = myView.bounds; 
layer.path = aPath.CGPath; 
myView.layer.mask = layer; 

[self addSubview:myView]; 

但是我的观点正在消失之后。为什么?

回答

4

我想你的掩模图层使用了不正确的坐标。您的遮罩图层必须位于遮罩的视图中,而不是视图的超视图中。

尝试这些变化:

CGSize viewSize = myView.bounds.size; 
CGPoint startPoint = CGPointZero; 

你与那些小的修改代码工作确定为我。

+0

哦,谢谢。没有意识到必须是0点。谢谢。 – Kuba

+0

不客气:-) –