From c1c4eb5bd24424422d555ca1ed2f40b1f02dfbca Mon Sep 17 00:00:00 2001 From: Ryo Tsuzukihashi Date: Sat, 6 Apr 2024 19:40:19 +0900 Subject: [PATCH] Create PartlyRoundedCornerView.swift --- .../PartlyRoundedCornerView.swift | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Sources/TsuzuKit/Representable/PartlyRoundedCornerView.swift diff --git a/Sources/TsuzuKit/Representable/PartlyRoundedCornerView.swift b/Sources/TsuzuKit/Representable/PartlyRoundedCornerView.swift new file mode 100644 index 0000000..83cb0e4 --- /dev/null +++ b/Sources/TsuzuKit/Representable/PartlyRoundedCornerView.swift @@ -0,0 +1,36 @@ +/// https://qiita.com/chocoyama/items/1cb7040f0e717406a6f4 +/// Useage +/// .cornerRadius(20, maskedCorners: [.layerMinXMinYCorner, .layerMaxXMinYCorner]) + +import SwiftUI + +public struct PartlyRoundedCornerView: UIViewRepresentable { + let cornerRadius: CGFloat + let maskedCorners: CACornerMask + + public func makeUIView(context: UIViewRepresentableContext) -> UIView { + let uiView = UIView() + uiView.layer.cornerRadius = cornerRadius + uiView.layer.maskedCorners = maskedCorners + uiView.backgroundColor = .white + return uiView + } + + public func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext) { + } +} + +public struct PartlyRoundedCornerModifier: ViewModifier { + let cornerRadius: CGFloat + let maskedCorners: CACornerMask + + public func body(content: Content) -> some View { + content.mask(PartlyRoundedCornerView(cornerRadius: self.cornerRadius, maskedCorners: self.maskedCorners)) + } +} + +extension View { + public func cornerRadius(_ radius: CGFloat, maskedCorners: CACornerMask) -> some View { + self.modifier(PartlyRoundedCornerModifier(cornerRadius: radius, maskedCorners: maskedCorners)) + } +}