뷰의 각 모서리를 라운딩 처리하는 방법

1. 기본 사용방법

simulator_screenshot_59886974-0BF6-4119-BB38-81C9ABB29515.png

import SwiftUI

struct ExampleCornerRadiusView: View {
    var body: some View {
        Color.red
            .frame(width: 150, height: 150)
            .clipShape(RoundedRectangle(cornerRadius: 12))
    }
}

2. 특정위치의 모서리 라운딩

import SwiftUI

struct CornerRadiusShape: Shape {
    var radius = CGFloat.infinity
    var corners = UIRectCorner.allCorners

    func path(in rect: CGRect) -> Path {
        let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        return Path(path.cgPath)
    }
}

struct CornerRadiusStyle: ViewModifier {
    var radius: CGFloat
    var corners: UIRectCorner

    func body(content: Content) -> some View {
        content
            .clipShape(CornerRadiusShape(radius: radius, corners: corners))
    }
}

extension View {
    func cornerRadius(radius: CGFloat, corners: UIRectCorner) -> some View {
        self.modifier(CornerRadiusStyle(radius: radius, corners: corners))
    }
}

simulator_screenshot_BFAE062F-08D6-451F-802B-9E8FFFE12094.png

import SwiftUI

struct ExampleCornerRadiusView: View {
    var body: some View {
        Color.red
            .frame(width: 150, height: 150)
						//사용
            .cornerRadius(radius: 12, corners: [.topLeft, .bottomRight])
    }
}