Cli*_*rum 2 macos appkit swiftui
我一直在尝试弄清楚如何在Mac 应用程序中圆化SwiftUI 的特定角。我能找到的所有解决方案(例如这个)仅适用于 iOS,因为它具有. 我找不到同等的东西。ViewUIRectCornerNSRectCorner
以前,我会NSView像这样绕过一个特定的角:
layer?.cornerRadius = 5
layer?.maskedCorners = .layerMinXMinYCorner //Bottom-left corner
Run Code Online (Sandbox Code Playgroud)
有没有人找到一种方法可以在 SwiftUI 中的 Mac 应用程序中圆化特定的角?
Chr*_*isR 10
macOS的答案来了:)
\n// defines OptionSet, which corners to be rounded \xe2\x80\x93 same as UIRectCorner\nstruct RectCorner: OptionSet {\n \n let rawValue: Int\n \n static let topLeft = RectCorner(rawValue: 1 << 0)\n static let topRight = RectCorner(rawValue: 1 << 1)\n static let bottomRight = RectCorner(rawValue: 1 << 2)\n static let bottomLeft = RectCorner(rawValue: 1 << 3)\n \n static let allCorners: RectCorner = [.topLeft, topRight, .bottomLeft, .bottomRight]\n}\n\n\n// draws shape with specified rounded corners applying corner radius\nstruct RoundedCornersShape: Shape {\n \n var radius: CGFloat = .zero\n var corners: RectCorner = .allCorners\n\n func path(in rect: CGRect) -> Path {\n var path = Path()\n\n let p1 = CGPoint(x: rect.minX, y: corners.contains(.topLeft) ? rect.minY + radius : rect.minY )\n let p2 = CGPoint(x: corners.contains(.topLeft) ? rect.minX + radius : rect.minX, y: rect.minY )\n\n let p3 = CGPoint(x: corners.contains(.topRight) ? rect.maxX - radius : rect.maxX, y: rect.minY )\n let p4 = CGPoint(x: rect.maxX, y: corners.contains(.topRight) ? rect.minY + radius : rect.minY )\n\n let p5 = CGPoint(x: rect.maxX, y: corners.contains(.bottomRight) ? rect.maxY - radius : rect.maxY )\n let p6 = CGPoint(x: corners.contains(.bottomRight) ? rect.maxX - radius : rect.maxX, y: rect.maxY )\n\n let p7 = CGPoint(x: corners.contains(.bottomLeft) ? rect.minX + radius : rect.minX, y: rect.maxY )\n let p8 = CGPoint(x: rect.minX, y: corners.contains(.bottomLeft) ? rect.maxY - radius : rect.maxY )\n\n \n path.move(to: p1)\n path.addArc(tangent1End: CGPoint(x: rect.minX, y: rect.minY),\n tangent2End: p2,\n radius: radius)\n path.addLine(to: p3)\n path.addArc(tangent1End: CGPoint(x: rect.maxX, y: rect.minY),\n tangent2End: p4,\n radius: radius)\n path.addLine(to: p5)\n path.addArc(tangent1End: CGPoint(x: rect.maxX, y: rect.maxY),\n tangent2End: p6,\n radius: radius)\n path.addLine(to: p7)\n path.addArc(tangent1End: CGPoint(x: rect.minX, y: rect.maxY),\n tangent2End: p8,\n radius: radius)\n path.closeSubpath()\n\n return path\n }\n}\n\n// View extension, to be used like modifier:\n// SomeView().roundedCorners(radius: 20, corners: [.topLeft, .bottomRight])\nextension View {\n func roundedCorners(radius: CGFloat, corners: RectCorner) -> some View {\n clipShape( RoundedCornersShape(radius: radius, corners: corners) )\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |