需要与UIBezierPath的提示。 像Instagram注册视图的三angular形状

我正在试图创build一个像下面的图片中的instagram三angular形的贝塞尔path,但是我一定是做错了什么。 贝塞尔path不显示!

- (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* trianglePath = [UIBezierPath bezierPath]; [trianglePath moveToPoint:CGPointMake(self.signUpButton.center.x, self.signUpButton.frame.origin.y + 30)]; [trianglePath addLineToPoint:CGPointMake(self.signUpButton.center.x - 10, self.imageView.frame.size.height)]; [trianglePath addLineToPoint:CGPointMake(self.signUpButton.center.x + 10, self.imageView.frame.size.height)]; UIColor *fillColor = [UIColor whiteColor]; [fillColor setFill]; UIColor *strokeColor = [UIColor whiteColor]; [strokeColor setStroke]; [trianglePath fill]; [trianglePath stroke]; [trianglePath closePath]; } 

在这里输入图像说明

Xcode 8.2.1•Swift 3.0.2

 func drawTriangle(size: CGFloat, x: CGFloat, y: CGFloat, up:Bool) { let triangleLayer = CAShapeLayer() let trianglePath = UIBezierPath() trianglePath.move(to: .zero) trianglePath.addLine(to: CGPoint(x: -size, y: up ? size : -size)) trianglePath.addLine(to: CGPoint(x: size, y: up ? size : -size)) trianglePath.close() triangleLayer.path = trianglePath.cgPath triangleLayer.fillColor = UIColor.white.cgColor triangleLayer.anchorPoint = .zero triangleLayer.position = CGPoint(x: x, y: y) triangleLayer.name = "triangle" view.layer.addSublayer(triangleLayer) } 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) 

这里有一些示例代码,我在我的项目中为UIButton绘制了一个三angular形,效果很好。

 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]; 

如果你想删除上一个button的三angular形,当你点击下一个button,然后使用下面的代码片段:

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