如何设置只有顶部的cornerRadius
有没有办法为UIView
左上角和右上角设置cornerRadius
?
编辑:
我尝试了以下,但最终没有看到视图了。 下面的代码有什么问题?
UIView *view = [[UIView alloc] initWithFrame:frame];
CALayer *layer = [CALayer layer];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(3.0, 3.0)];
layer.shadowPath = shadowPath.CGPath;
view.layer.mask = layer;
注意一个事实,如果你有附加的布局约束条件,你必须刷新它,如下所示:
override public func layoutSubviews() {
super.layoutSubviews()
roundCorners(corners: [.bottomLeft, .bottomRight], radius: 3.0)
}
如果你不这样做,它不会显示出来。
我不确定你的解决方案为什么不起作用,但下面的代码适用于我。 创建一个贝塞尔面具并将其应用于您的视图。 在我的代码中,我将半径为3个像素的_backgroundView
四舍五入。 self
是一个自定义的UITableViewCell
:
UIBezierPath *maskPath = [UIBezierPath
bezierPathWithRoundedRect:self.backgroundImageView.bounds
byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight)
cornerRadii:CGSizeMake(20, 20)
];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
self.backgroundImageView.layer.mask = maskLayer;
Swift版本进行了一些改进:
let path = UIBezierPath(roundedRect:viewToRound.bounds, byRoundingCorners:[.TopRight, .BottomLeft], cornerRadii: CGSizeMake(20, 20))
let maskLayer = CAShapeLayer()
maskLayer.path = path.CGPath
viewToRound.layer.mask = maskLayer
Swift 3.0版本:
let path = UIBezierPath(roundedRect:viewToRound.bounds,
byRoundingCorners:[.topRight, .bottomLeft],
cornerRadii: CGSize(width: 20, height: 20))
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
viewToRound.layer.mask = maskLayer
在这里快速扩展
这里是@JohnnyRockex答案的Swift版本
extension UIView {
func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
}
view.roundCorners([.topLeft, .bottomRight], radius: 10)
注意
如果您使用的是自动布局 ,则需要对UIView
进行子类化,并在视图的layoutSubviews
调用roundCorners
以获得最佳效果。
class View: UIView {
override func layoutSubviews() {
super.layoutSubviews()
self.roundCorners([.topLeft, .bottomLeft], radius: 10)
}
}
链接地址: http://www.djcxy.com/p/74237.html