在UIButton中创建三角形

时间:2014-07-15 22:12:24

标签: ios uiview uibutton uibezierpath cashapelayer

我正在尝试创建一个带有三角形图标/形状的按钮。我在Paintcode中创建了三角形,然后复制了beizer路径并将其添加到按钮层,如下所示。

-(void)setupShowHideRouteButton {
    UIBezierPath* bezierPath = UIBezierPath.bezierPath;
    [bezierPath moveToPoint: CGPointMake(10.5, 8.5)];
    [bezierPath addCurveToPoint: CGPointMake(40.5, 8.5) controlPoint1: CGPointMake(39.5, 8.5) controlPoint2: CGPointMake(40.5, 8.5)];
    [bezierPath addLineToPoint: CGPointMake(26.39, 22.3)];
    [bezierPath addLineToPoint: CGPointMake(25.2, 23.5)];
    [bezierPath addLineToPoint: CGPointMake(10.5, 8.5)];
    [UIColor.blackColor setStroke];
    bezierPath.lineWidth = 1;
    [bezierPath stroke];

    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.frame = self.showHideRouteViewBtn.bounds;
    shapeLayer.path = bezierPath.CGPath;
    shapeLayer.fillColor = [UIColor clearColor].CGColor;
    shapeLayer.strokeColor = [UIColor blackColor].CGColor;
    shapeLayer.lineWidth = 2;
    [self.showHideRouteViewBtn.layer addSublayer:shapeLayer];
}

然而,这似乎不起作用。我正在设置UIButton的背景颜色,所以我知道框架是正确的,并且插座按预期工作,它只是没有添加形状?

第二种方法

UIBezierPath* bezierPath = UIBezierPath.bezierPath;
[bezierPath moveToPoint: CGPointMake(10.5, 8.5)];
[bezierPath addCurveToPoint: CGPointMake(40.5, 8.5) controlPoint1: CGPointMake(39.5, 8.5) controlPoint2: CGPointMake(40.5, 8.5)];
[bezierPath addLineToPoint: CGPointMake(26.39, 22.3)];
[bezierPath addLineToPoint: CGPointMake(25.2, 23.5)];
[bezierPath addLineToPoint: CGPointMake(10.5, 8.5)];
[UIColor.blackColor setStroke];
bezierPath.lineWidth = 1;
[bezierPath stroke];

// Create a mask layer and the frame to determine what will be visible in the view.
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGRect maskRect = self.showHideRouteViewBtn.bounds;

// Create a path with the rectangle in it.
CGPathRef path = CGPathCreateWithRect(maskRect, NULL);

// Set the path to the mask layer.
maskLayer.path = bezierPath.CGPath;

// Release the path since it's not covered by ARC.
CGPathRelease(path);

// Set the mask of the view.
self.showHideRouteViewBtn.layer.mask = maskLayer;

这也不起作用。

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = self.showHideRouteViewBtn.bounds;
shapeLayer.path = bezierPath.CGPath;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.strokeColor = [UIColor blackColor].CGColor;
shapeLayer.lineWidth = 2;
self.showHideRouteViewBtn.layer.mask = shapeLayer;