BezierPath et le masquage

Je veux configurer UIBezierPath en tant que masque dans ma vue: L'objective est quelque chose comme ceci: entrez la description de l'image ici

Donc, je dessine la vue avec le cadre:

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

Et puis essayez d'append 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]; 

Mais mon sharepoint vue disparaît après cela. Pourquoi?

Je suppose que vous utilisez des coordonnées incorrectes pour votre couche de masque. Votre calque de masque doit être positionné dans la vue qu'il masque, et non dans la vue d'set de la vue.

Essayez ces changements:

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

Votre code avec ces petites modifications fonctionne bien pour moi.