2013-10-07 183 views
2

我想设置的UIButton和圆角边框仅在单侧的UIButton圆角和边框

我用这个代码:

//set rounded corners on top 
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.scanButton.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(10.0, 10.0)]; 

CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
maskLayer.frame = self.scanButton.bounds; 
maskLayer.path = maskPath.CGPath; 

self.scanButton.layer.mask = maskLayer; 

// set border 
self.scanButton.layer.borderColor = [UIColor blackColor].CGColor; 
self.scanButton.layer.borderWidth = 2.0f; 
[self.scanButton.layer setMasksToBounds:YES]; 

enter image description here

我怎么能做出正确的边界在顶角?

回答

1

你可能更好的是继承UIButton并重写drawRect:用你的自定义绘图。你需要实现一个CGContext并添加你的UIBezierPath,然后对其进行描边。无法回想一下,如果您需要首先将其设置为CGPath,但我不这么认为。

1

看看下面的答案 - Stroke masked CALayer in iOS他使用组合的面具&形状图层来绘制这样的自定义边框。您需要关闭蒙版图层的常规边框。

3

雨燕2.0的版本

边框的边角裁剪,因为你可能已经设置了UIView自身视图的背景颜色。更好的方法是直接在图层上设置填充颜色。这可能就像这样:

let button = ... // your existing UIButton 
let borderLayer = CAShapeLayer() 
borderLayer.strokeColor = UIColor.blackColor().CGColor 
borderLayer.fillColor = UIColor.yellowColor().CGColor 
borderLayer.borderWidth = 2.0 

let borderPath = UIBezierPath(roundedRect: button.bounds, 
    byRoundingCorners: [.TopLeft, .TopRight], 
    cornerRadii: CGSize(width:10.0, height: 10.0)) 
    borderLayer.path = borderPath.CGPath 

button.layer.insertSublayer(borderLayer, atIndex: 0) 

上述会给你这样的结果不被剪切的边角:

example button

我用这个方法,其中圆角半径可以放在一起一个UIButton子类单独设置在按钮的每个角落,请在这里查看:https://gist.github.com/alexpls/95279b3f9a2da7f2d7bf,希望它有帮助!

+0

尽管此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – Luke

+0

谢谢,好点。我已经改变了答案,所以它包含了一个更具针对性的代码示例。 – alexpls