Besoin d'un conseil avec UIBezierPath. Forme de sortingangle comme Instagram Inscrivez-vous Voir

J'essaie de créer un bézier comme le sortingangle instagram dans l'image ci-dessous, mais je dois faire quelque chose de mal. Le path de Bézier ne montre pas!

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } -(void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; [self drawTriangle]; } - (IBAction)closeButton:(UIButton *)sender { [self dismissViewControllerAnimated:YES completion:nil]; } - (void)drawTriangle{ UIBezierPath* sortinganglePath = [UIBezierPath bezierPath]; [sortinganglePath moveToPoint:CGPointMake(self.signUpButton.center.x, self.signUpButton.frame.origin.y + 30)]; [sortinganglePath addLineToPoint:CGPointMake(self.signUpButton.center.x - 10, self.imageView.frame.size.height)]; [sortinganglePath addLineToPoint:CGPointMake(self.signUpButton.center.x + 10, self.imageView.frame.size.height)]; UIColor *fillColor = [UIColor whiteColor]; [fillColor setFill]; UIColor *strokeColor = [UIColor whiteColor]; [strokeColor setStroke]; [sortinganglePath fill]; [sortinganglePath stroke]; [sortinganglePath closePath]; } 

entrez la description de l'image ici

Xcode 8.2.1 • Swift 3.0.2

 func drawTriangle(size: CGFloat, x: CGFloat, y: CGFloat, up:Bool) { let sortingangleLayer = CAShapeLayer() let sortinganglePath = UIBezierPath() sortinganglePath.move(to: .zero) sortinganglePath.addLine(to: CGPoint(x: -size, y: up ? size : -size)) sortinganglePath.addLine(to: CGPoint(x: size, y: up ? size : -size)) sortinganglePath.close() sortingangleLayer.path = sortinganglePath.cgPath sortingangleLayer.fillColor = UIColor.white.cgColor sortingangleLayer.anchorPoint = .zero sortingangleLayer.position = CGPoint(x: x, y: y) sortingangleLayer.name = "sortingangle" view.layer.addSublayer(sortingangleLayer) } drawTriangle(size: 12, x: view.frame.midX/2, y: view.frame.midY, up: true) drawTriangle(size: 12, x: view.frame.midX, y: view.frame.midY, up: false) 

Voici un exemple de code que j'ai dessiné un sortingangle pour UIButton dans mon projet et qui fonctionne très bien.

 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setBackgroundColor:[UIColor redColor]]; btn.frame = CGRectMake(100, 100, 80, 53); [self.view addSubview:btn]; UIBezierPath* bezierPath = UIBezierPath.bezierPath; [bezierPath moveToPoint:CGPointMake(40, 43)]; [bezierPath addLineToPoint:CGPointMake(25, 53)]; [bezierPath addLineToPoint:CGPointMake(55, 53)]; [bezierPath closePath]; CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.frame = btn.bounds; shapeLayer.path = bezierPath.CGPath; shapeLayer.fillColor = [UIColor whiteColor].CGColor; [btn.layer addSublayer:shapeLayer]; 

et si vous voulez supprimer le sortingangle du button précédent lorsque vous click le button suivant, utilisez l'extrait de code suivant:

 NSArray *arr = btn.layer.sublayers; for (id class in arr) { if ([class isKindOfClass:[CAShapeLayer class]] ) { [class removeFromSuperlayer]; } }