有没有办法cornerRadius只设置 a 的左上角和右上角UIView?
cornerRadius
UIView
我尝试了以下操作,但最终不再看到该视图。
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;
请注意,如果您附加了布局约束,则必须在 UIView 子类中按如下方式刷新它:
override func layoutSubviews() { super.layoutSubviews() roundCorners(corners: [.topLeft, .topRight], radius: 3.0) }
如果你不这样做,它就不会出现。
要圆角,请使用扩展名:
extension UIView { func roundCorners(corners: UIRectCorner, radius: CGFloat) { let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) let mask = CAShapeLayer() mask.path = path.cgPath layer.mask = mask } }
附加视图控制器案例 :无论您不能或不想子类化视图,您仍然可以对视图进行舍入。通过覆盖该函数从其视图控制器执行此viewWillLayoutSubviews()操作,如下所示:
viewWillLayoutSubviews()
class MyVC: UIViewController { /// The view to round the top-left and top-right hand corners let theView: UIView = { let v = UIView(frame: CGRect(x: 10, y: 10, width: 200, height: 200)) v.backgroundColor = .red return v }() override func loadView() { super.loadView() view.addSubview(theView) } override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() // Call the roundCorners() func right there. theView.roundCorners(corners: [.topLeft, .topRight], radius: 30) } }