Abd*_*ich 4 uitabbarcontroller uitableview cashapelayer uibezierpath swift
我正在尝试使用下面的代码来绕顶角
func roundCorners(corners:UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds,
byRoundingCorners: corners,
cornerRadii: CGSize(width: radius, height: radius))
let maskLayer = CAShapeLayer()
maskLayer.frame = self.bounds
maskLayer.path = path.cgPath
self.layer.mask = maskLayer
}
Run Code Online (Sandbox Code Playgroud)
使用 myView.roundCorners(corners:[.topLeft, .topRight], radius: radius)
这是在tableView sectionHeader中,如果我向下滚动然后使用相同的代码向上舍入:

顶部折扣视角也使用相同的功能进行四舍五入.
感谢帮助.
更新 如果我修复视图上的宽度然后它工作正常.
Jos*_*osé 11
iOS 11引入了maskedCorners,可以获得更平滑,质量更好的结果.您仍然可以在函数调用中使用UIRectCorner并将其转换为CACornerMask:
Swift 4.2:
extension UIView {
func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
if #available(iOS 11.0, *) {
clipsToBounds = true
layer.cornerRadius = radius
layer.maskedCorners = CACornerMask(rawValue: corners.rawValue)
} else {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask
}
}
}
Run Code Online (Sandbox Code Playgroud)
在@Paolo的帮助下解决了这个问题,下面是工作代码。
斯威夫特3.2
extension UIView {
func roundCorners(corners:UIRectCorner, radius: CGFloat) {
DispatchQueue.main.async {
let path = UIBezierPath(roundedRect: self.bounds,
byRoundingCorners: corners,
cornerRadii: CGSize(width: radius, height: radius))
let maskLayer = CAShapeLayer()
maskLayer.frame = self.bounds
maskLayer.path = path.cgPath
self.layer.mask = maskLayer
}
}
}
Run Code Online (Sandbox Code Playgroud)
要调用此函数,请在下面的行中使用,并提及要舍入的角
self.myView.roundCorners(corners: [.topLeft, .topRight, .bottomLeft, .bottomRight], radius: 8.0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3077 次 |
| 最近记录: |