SwiftUI中.compositingGroup()的用途是什么?

时间:2020-04-29 11:33:57

标签: swiftui

我不知道什么是compositingGroup()。起初,我认为它类似于Photoshop中的Merging layers。但事实并非如此。因为即使使用.compositingGroup(),.shadow()也会分别影响覆盖视图和背景视图。

到目前为止,当我使用.compositingGroup()时,我发现了2个差异

  • 文本没有阴影。
  • 叠加视图的阴影大小比上面的略小。

compositingGroup的用途是什么?

struct ContentView: View {
    var body: some View {
        VStack(spacing: 50) {
            Text("Without\ncompositing")
                .font(.largeTitle)
                .bold()
                .padding()
                .foregroundColor(Color.white)
                .background(RoundedRectangle(cornerRadius: 30).fill(Color.red))
                .padding()
                .padding()
                .overlay(RoundedRectangle(cornerRadius: 30).stroke(lineWidth: 10))
                .shadow(color: .blue, radius: 5)

            Text("With\ncompositing")
                .font(.largeTitle)
                .bold()
                .padding()
                .foregroundColor(Color.white)
                .background(RoundedRectangle(cornerRadius: 30).fill(Color.red))
                .padding()
                .padding()
                .overlay(RoundedRectangle(cornerRadius: 30).stroke(lineWidth: 10))
                .compositingGroup() // <--- I added .compositingGroup() here.
                .shadow(color: .blue, radius: 5)
        }
    }
}

enter image description here

1 个答案:

答案 0 :(得分:1)

以类似于.drawingGroup()的方式,它展平了视图层次结构。我不知道这与阴影有什么关系。

drawingGroup()展平为单个UIView / NSView,并使用Metal将其渲染为图像,以非常快速地渲染复杂视图。
也许.compositingGroup()是这样做的,但是没有Metal。