我使用以下代碼在 SwiftUI 中制作了一個自定義形狀:
struct CustomShape: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: rect.minX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
path.addQuadCurve(to: CGPoint(x: 0, y: rect.minY), control: CGPoint(x: rect.midX, y: rect.minY - 25))
return path
}
}
此形狀的用法如下所示:
CustomShape()
.fill(.ultraThickMaterial)
.frame(height: 200)
問題是,如果我嘗試用一??種顏色填充它,它會完美地作業。如果我嘗試用一??種材料填充它,只有矩形似乎被填充,弧形部分保持白色:


你知道如何解決這個問題嗎?
uj5u.com熱心網友回復:
當您使用材料時,似乎正在應用剪裁,但在使用顏色時卻沒有。路徑的弧線延伸到視圖框架之外。
您可以通過使路徑完全包含在rect形狀引數中來解決此問題:
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: rect.minX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY 25))
path.addQuadCurve(to: CGPoint(x: 0, y: rect.minY 25), control: CGPoint(x: rect.midX, y: rect.minY))
path.closeSubpath()
return path
}
如果您真的希望材料延伸到框架之外,那么您需要使用某種容器視圖。
uj5u.com熱心網友回復:
我想說應該使用backgroundand來實作預期的效果clipShape(假設CustomShape構造正確)
這是一個更好的可見性演示(使用 Xcode 13.3 / iOS 15.4 測驗)
Image("background").overlay(
Rectangle()
.background(.thinMaterial) // << here !! (thin for demo)
.frame(height: 200)
.clipShape(CustomShape()) // << here !!
)

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467351.html
