嗨,我正在寻找一个干净的解决方案,不覆盖drawRect
或类似的东西,以创建一个UIView
与圆角上的View.我这里的主要问题是,如果视图正在调整大小或类似的事情,则创建变量解决方案.
嗨,我正在寻找一个干净的解决方案,不覆盖drawRect
或类似的东西,以创建一个UIView
与圆角上的View.我这里的主要问题是,如果视图正在调整大小或类似的事情,则创建变量解决方案.
可以通过在视图的图层上设置mask
来实现:
CAShapeLayer * maskLayer = [CAShapeLayer layer];
maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: self.bounds byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii: (CGSize){10.0, 10.}].CGPath;
self.layer.mask = maskLayer;
IMPORTANT:您应该在视图的layoutSubviews()
方法中执行此操作,因此视图已经从情节提要中调整了大小
In Swift <= 1.2
let maskLayer = CAShapeLayer()
maskLayer.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: .TopLeft | .TopRight, cornerRadii: CGSize(width: 10.0, height: 10.0)).CGPath
layer.mask = maskLayer
Swift 2.x
let maskLayer = CAShapeLayer()
maskLayer.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: UIRectCorner.TopLeft.union(.TopRight), cornerRadii: CGSizeMake(10, 10)).CGPath
layer.mask = maskLayer
Swift 3.x
let maskLayer = CAShapeLayer()
maskLayer.path = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 10, height: 10)).cgPath
layer.mask = maskLayer