我正在尝试在 SwiftUI 中设计一个视频修剪器视图,如下所示。结果如下。我的问题是,我是否可以将中间部分(即除左右 20 个点和上下 5 个点之外的所有内容)透明,以便我可以在它们后面显示缩略图(也许通过自定义剪辑形状)?
var body: some View {
HStack(spacing: 10) {
Image(systemName: "chevron.compact.left")
.frame(height:70)
Spacer()
Image(systemName: "chevron.compact.right")
}
.foregroundColor(.black)
.font(.title3.weight(.semibold))
.padding(.horizontal, 7)
.padding(.vertical, 3)
.background(.yellow)
.clipShape(RoundedRectangle(cornerRadius: 7))
.frame(width: 300)
.onGeometryChange(for: CGFloat.self) { proxy in
proxy.size.width
} action: { width in
print("width = \(width)")
}
}
而不是
background
和,而是clipShape
使用background(_:in:fillStyle:)
。这允许您指定要Shape
在其中填充背景颜色的。你可以
Shape
这样写:我只是从非嵌入的路径中减去嵌入的圆角矩形创建的路径。
然后
subtracting
从 iOS 17 开始可用。如果需要支持较低版本,您可以直接添加较小的圆角矩形作为子路径,但使用奇偶填充。另一种裁剪背景部分的方法是使用 叠加层
.blendMode(.destinationOut)
。还需要将其应用于.compositingGroup()
结果,以防止混合模式烧入更深的层。替换这些修饰符:
和:
您在已接受的答案的评论中提到,您希望 V 形看起来居中。由于您在侧面应用了 7 的填充,这意味着在内侧也应用了 7 的填充(或间距)。
实现此目的的一种方法是将 V 形移动到覆盖层中。这样实际上整个视图就可以简化:
编辑在此特定情况下,您使用纯色填充,中间部分是方形矩形。这意味着,只需使用基本技术即可构建视图 - 无需使用混合模式,也无需使用自定义形状。
HStack
作为基础视图,就像您已经做的那样。HStack
,要么应用填充以将其大小限制在可用空间内。HStack
并根据需要应用填充。HStack
,而是用合适粗细的线条描边其边框。Spacer
然后里面就会HStack
自动出现“洞”。要使边角变圆,可以使用圆角矩形作为边框。但是,这意味着要调整图像的填充,以使方角不显示出来。或者,使用矩形边框,然后应用剪辑形状,就像您最初所做的那样: