swift 在雨燕中平滑圆角

hjzp0vay  于 2023-03-11  发布在  Swift
关注(0)|答案(4)|浏览(487)

bounty将在5天后过期。回答此问题可获得+500声望奖励。Fattie希望奖励现有答案

如何创建一个圆角平滑的UIButton?标准苹果圆角比标准圆角要漂亮得多。如果我在sketch中设计一个按钮,我可以切换“平滑角”,将形状的角从苹果圆角(平滑)切换到标准圆角。
下面是一个比较:

我怎样才能在swift中切换这个?
showContentButton.layer.cornerRadius = 20是圆角,但是我不知道这个圆角是“光滑的圆角”还是“标准的圆角”,也不知道怎么切换,有什么想法吗?

eagi6jfj

eagi6jfj1#

iOS 13.0开始,除了设置cornerRadius之外,您还可以使用此属性:

sampleButton.layer.cornerCurve = .continuous

这也很容易动画化,这在以前使用UIBezierPath时会导致问题。
更多详情请访问https://developer.apple.com/documentation/quartzcore/calayer/3152596-cornercurve

jslywgbw

jslywgbw2#

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)
)

Source

eufgjt7s

eufgjt7s3#

就用这个分机

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)
3okqufwl

3okqufwl4#

对于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))
    }
}

Result here

相关问题