2013-05-27 3 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,0 балла. Благодарю. – Kuba

+0

Добро пожаловать :-) –

Смежные вопросы