从 iOS 13.0 开始,除了设置 cornerRadius 属性外,您还可以直接使用此属性:
sampleButton.layer.cornerCurve = .continuous
这也很容易进行动画处理,而以前使用UIBezierPath会导致问题。
详见https://developer.apple.com/documentation/quartzcore/calayer/3152596-cornercurve
iOS 13之前
要获得这种效果,您可以使用UIBezierPath
编辑: 在UIView中的用法
class MyView: UIView {
let myButton UIButton = UIButton()
override func layoutSubviews() {
super.layoutSubviews()
// your roundPath code here
}
}
编辑 2:
使用此方法来对特定的角进行四舍五入:
let roundPath = UIBezierPath(
roundedRect: bounds,
byRoundingCorners: [.topLeft, .topRight],
cornerRadii: CGSize(width: 10, height: 10)
)
layoutSubviews
方法里面做的吗? - inokey对于SwiftUI,您可以尝试以下内容:
.clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous))
例子:
Rectangle()
.clipShape(RoundedRectangle(cornerRadius: 24, style: .continuous))
.padding()
或者使用扩展:
extension View {
func smoothCornerRadius(_ x: CGFloat) -> some View {
return self
.clipShape(RoundedRectangle(cornerRadius: x, style: .continuous))
}
}
只需使用此扩展程序。
extension CALayer {
func roundCorners(radius: CGFloat) {
let roundPath = UIBezierPath(
roundedRect: self.bounds,
cornerRadius: radius)
let maskLayer = CAShapeLayer()
maskLayer.path = roundPath.cgPath
self.mask = maskLayer
}
}
并像这样使用它
cell.layer.roundCorners(radius: 18)
layoutSubviews
时更新它的frame(这是layoutSubviews
的整个目的)。 - Fattie