Animation 为什么在SwiftUI中,颜色视图的褪色速度似乎比图像视图快?

Animation 为什么在SwiftUI中,颜色视图的褪色速度似乎比图像视图快?,animation,swiftui,opacity,Animation,Swiftui,Opacity,我有以下代码,其中我的SplashScreen的内容会平滑地淡出。但似乎颜色(“app_Color”)视图比图像视图消失得更快 import SwiftUI struct ContentView: View { var body: some View { ZStack { TabbedView() SplashScreen (duration: 2.0, delay: 2.0) { Spla

我有以下代码,其中我的SplashScreen的内容会平滑地淡出。但似乎颜色(“app_Color”)视图比图像视图消失得更快

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack {
            TabbedView()
            SplashScreen (duration: 2.0, delay: 2.0) {
                SplashContents()
            }
        }
    }
}

struct SplashContents: View {
    var body: some View {
        ZStack {
            Color("app_color")
            Image("app_logo")
                .resizable()
                .frame(width: 200, height: 200)
        }
    }
}

public struct SplashScreen<Content: View>: View {
    
    @State private var showSplash = true
    
    let duration: Double
    let delay: Double
    let content: Content
    
    public init(duration: Double = 0, delay: Double = 0, @ViewBuilder contentProvider: () -> Content){
        self.duration = duration
        self.delay = delay
        self.content = contentProvider()
    }
    
    public var body: some View {
        content
            .edgesIgnoringSafeArea(.all)
            .opacity(showSplash ? 1 : 0)
            .zIndex(0) //push this screen to the back
            .onAppear {
                DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                    withAnimation(.easeOut(duration: duration)) {
                            showSplash = false
                    }
                }
            }
    }
}

导入快捷界面
结构ContentView:View{
var body:一些观点{
ZStack{
选项卡视图()
溅屏(持续时间:2.0,延迟:2.0){
内容(
}
}
}
}
结构内容:视图{
var body:一些观点{
ZStack{
颜色(“应用程序颜色”)
图像(“应用程序标识”)
.可调整大小()
.框架(宽:200,高:200)
}
}
}
公共结构SplashScreen:视图{
@状态私有变量showSplash=true
持续时间:双倍
让我们延迟:加倍
让内容:内容
public init(持续时间:Double=0,延迟:Double=0,@ViewBuilder contentProvider:()->Content){
self.duration=持续时间
self.delay=延迟
self.content=contentProvider()
}
公共机构:一些看法{
内容
.edgesIgnoringSafeArea(.all)
.不透明度(showSplash?1:0)
.zIndex(0)//将此屏幕推到后面
奥纳佩尔先生{
DispatchQueue.main.asyncAfter(截止日期:.now()+2){
带动画(.easeOut(持续时间:持续时间)){
showSplash=false
}
}
}
}
}
结果可以在附加的视频中看到


因此,在视频中,你可以明显地看到方形图像与红色背景分开,因为它们似乎以不同的速率衰减。我的问题是,如何使颜色视图以与图像视图相同的速率淡入淡出,使图像和颜色视图看起来像是一个项目?

我认为不是图像的淡入速度较慢,而是它们重叠。您可以将其视为在该图像区域中有两次红色

将它们一起渲染的一种方法是使用修饰符
compositingGroup()

合成组使此视图的上级视图中的合成效果(例如不透明度和混合模式)在渲染此视图之前生效

在将效果应用于父视图之前,请使用compositingGroup()将效果应用于父视图


你可以找到更多的信息。

我认为这不是因为图像褪色变慢,而是因为它们重叠了。您可以将其视为在该图像区域中有两次红色

将它们一起渲染的一种方法是使用修饰符
compositingGroup()

合成组使此视图的上级视图中的合成效果(例如不透明度和混合模式)在渲染此视图之前生效

在将效果应用于父视图之前,请使用compositingGroup()将效果应用于父视图


您可以找到更多信息。

非常感谢。成功了,非常感谢。这就成功了。
ZStack {
    Color("app_color")
    Image("app_logo")
        .resizable()
        .frame(width: 200, height: 200)
}
.compositingGroup()