Need a tip with UIBezierPath. Triangle Shape like Instagram Sign Up View

后端 未结 2 1360
臣服心动
臣服心动 2021-01-01 03:27

I\'m trying to create a bezier path like the instagram triangle in the picture below, however I must be doing something wrong. The Bezier path does not show!



        
相关标签:
2条回答
  • 2021-01-01 03:58

    Xcode 10 • Swift 4.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)
    
    0 讨论(0)
  • 2021-01-01 04:02

    Here is some sample code that I have drawn a triangle for UIButton in my project and working great.

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

    and if you want to remove triangle of previous button when you click on next button then use following code snippet:

    NSArray *arr = btn.layer.sublayers;
    
    for (id class in arr) {
    
        if ([class isKindOfClass:[CAShapeLayer class]] ) {
            [class removeFromSuperlayer];
        }
    }
    
    0 讨论(0)
提交回复
热议问题