项目中遇到一个小小的问题,给一个UIView的左上和右上角分别添加圆角,其他角不动。
本来是写个方法传入角度和要切的哪个角就行了
/// 部分圆角
/// - Parameters:
/// - corners: 需要实现为圆角的角,可传入多个
/// - radii: 圆角半径
func corner(byRoundingCorners corners:UIRectCorner, cornerRadii: CGFloat) {
let maskPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: cornerRadii, height: cornerRadii))
let maskLayer = CAShapeLayer()
maskLayer.frame = self.bounds
maskLayer.path = maskPath.cgPath
self.layer.mask = maskLayer
}
whiteView.corner(byRoundingCorners: [UIRectCorner.topLeft,UIRectCorner.topRight], cornerRadii: 10)
然而,上面的whiteView是xib上拖出来的,死活看不到想要的效果,出来的效果就是上面那张图,少切了一个角!
真是太诡异了
在设置圆角的View里又重新调用了一下
self.layoutIfNeeded()
然而,还是没用
继续尝试,寻思着切圆角的方法跟画图有关,难道要写在DrawRect方法里?
于是添加如下代码:
override func draw(_ rect: CGRect) {
super.draw(rect)
whiteView.corner(byRoundingCorners: [UIRectCorner.topLeft,UIRectCorner.topRight], cornerRadii: 10)
}
运行出来了效果,两个角都切了。
思考:为什么调用layoutIfNeeded方法没有效果而重写draw方法有效?
原因:layoutIfNeeded方法刷新视图并重新加载layoutSubViews方法。