如何围绕UILabel的前两个角?

时间:2012-01-27 14:00:12

标签: iphone objective-c ios uilabel

我知道在iOS 3.0+中我可以使用

 label.layer.cornerRadius = xxx;

围绕UILabel的所有四个角(作为UIView子类),但我想只围绕标签的顶部两个角并使底角保持直角。

有什么方法可以用UILabel做到这一点吗?其他解决方案假设自定义UIView,而不是UILabel。

3 个答案:

答案 0 :(得分:27)

以为我会发布包含BezierPath的完整代码。

CGRect bounds = label.bounds;
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds
                                                                   byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)
                                                                         cornerRadii:CGSizeMake(5.0, 5.0)];

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

label.layer.mask = maskLayer;

对于Swift 4.0:

let bounds: CGRect = label.bounds
let maskPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: ([.topLeft, .topRight]), cornerRadii: CGSize(width: 5.0, height: 5.0))
let maskLayer = CAShapeLayer()
maskLayer.frame = bounds
maskLayer.path = maskPath.cgPath
label.layer.mask = maskLayer

答案 1 :(得分:16)

你可以使用CALayers和mask

来做到这一点
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.path = maskPath.CGPath;
label.layer.mask = maskLayer;

其中maskPath是使用bezierPathWithRoundedRect:byRoundingCorners:cornerRadii

设置的UIBezierPath

答案 2 :(得分:1)

我已经检查了UIView&的Class Reference。 UILabel及其图层,但无法通过iOS给出的方法找到任何方法。

你可以做一件事,创建一个UIView&应用圆角。现在添加一个UILabel作为子视图到这个UIView&以这样的方式定位它,使得底部2个圆角被标签覆盖。这样你就可以获得所需的效果......