在加载视图时淡入控件(而不是在状态更改后插入)

Fade-in a control in when a view is loaded (and not inserted after a state change)

我想要的是当控件所在的视图出现第一次时,控件会淡入。我已经尝试了所有方法,但没有成功。

withAnimation(.default) {
    Text("hey")
        .transition(.opacity)
}   

// as well as

Text("hey")
    .transition(.opacity)
    .animation(.default)

// and finally

@State var opacity:Double = 0.0
Text("hey")
    .opacity(self.opacity)
    .transition(.opacity)
    .animation(.default)
[...]
.onAppear() {
    self.opacity = 1.0
}

如果通过按下更改 self.opacity 的值的按钮使视图可见,我可以让动画工作,我想如果控件不可见,上述方法通常会工作最初应该出现,但被插入了。

这是可能的解决方案(您可以调整参数以获得所需的效果)

测试 Xcode 12.1 / iOS 14.1

struct DemoFadeInView: View {
    @State var isShown = false
    var body: some View {
        VStack {
            if isShown {
                Text("hey")
                     .transition(.opacity)
            }
        }
         .animation(Animation.easeInOut(duration: 1).delay(0.5))  // delay is optional, for demo
        .onAppear() {
             self.isShown.toggle()
        }
    }
}