我正在尝试创建一个带有三角形图标/形状的按钮.我创建了三角形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;
这也不起作用.