2014-07-15 29 views
6

Tôi đang cố tạo nút có biểu tượng/hình tam giác trong đó. Tôi đã tạo tam giác trong Paintcode sau đó sao chép đường dẫn trình xử lý và thêm nó vào lớp nút như sau.Tạo hình tam giác trong UIButton

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

Tuy nhiên, điều này dường như không hoạt động. Tôi đang thiết lập màu nền của UIButton vì vậy tôi biết khung là chính xác và ổ cắm làm việc như mong đợi nó chỉ là không thêm hình dạng?

Cách tiếp cận thứ hai

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; 

này đã không làm việc một trong hai.

+0

Hãy thử mặt nạ lớp – klcjr89

+0

Nếu bạn đặt 'backgroundColor' của lớp hình dạng, bạn có thể xác nhận rằng nó phù hợp một cách chính xác bên trong xem? –

+0

@ troop231 - Xem cách tiếp cận thứ hai được đề cập, điều này không có tác dụng đối với tôi hoặc là – StuartM

Trả lời

2

Hãy thử như sau:

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; 
+0

Cảm ơn. Tôi cũng nhận thấy một sai lầm ngu ngốc mà tôi đã làm theo cách giải quyết nó ... Quá muộn vào ban đêm, xấu của tôi! Cảm ơn – StuartM

+0

Vui vì nó đã giúp! Chấp nhận xin vui lòng – klcjr89

+0

Gotta chờ 5 phút, bạn sẽ nhận được nó :) – StuartM