【问题标题】:The picture will disappear in 10-15 seconds. SwiftUi [closed]图片将在 10-15 秒后消失。 SwiftUi [关闭]
【发布时间】:2021-12-20 05:10:50
【问题描述】:

如何让图片在打开应用15秒后消失?

我应该使用哪种方法?动画还是某种功能?

我的代码:

struct Img: View {
    var body: some View {
        
        VStack {
            
            Image(systemName: "photo.fill")
                .resizable()
                .scaledToFit()
                .frame(width: 200, height: 200)
            
        }
    }
}

打开应用10-15秒后,图片消失,不出现。我重新打开应用后,又会出现一张图片,10-15秒后会消失……

如果你知道怎么做,请帮助我,我将不胜感激

【问题讨论】:

  • 这很简单,但是到目前为止您尝试过什么?

标签: ios swift xcode swiftui


【解决方案1】:

您可以使用动画延迟。

此示例将显示图像 15 秒,然后淡出。当应用程序被强制退出并再次打开时,同样的事情再次发生:

struct Img: View {
    @State private var isImageVisible = true

    var body: some View {
        VStack {
            Image(systemName: "photo.fill")
                .resizable()
                .scaledToFit()
                .frame(width: 200, height: 200)
                .opacity(isImageVisible ? 1 : 0)
                .animation(.default.delay(15), value: isImageVisible)
        }
        .onAppear {
            isImageVisible = false
        }
    }
}

【讨论】:

  • 非常感谢!
  • 您的答案有一个使用框架和占用空间的小问题,即使视图消失了,每次计算身体时也需要一些 cpu 功率来渲染它!我不知道 OP 怎么能用你的回答来处理 Image 占用的空间。
  • "需要一些 CPU 能力来渲染它" -- 这是假设 SwiftUI 在渲染不透明度为 0 的视图时没有做任何优化。另外,即使它做了 占用 CPU 能力,可能需要数千个对象才能产生明显的影响。
  • @jnpdx:糟糕的编码不一定会让整个系统崩溃! PS:当不需要那个东西时,我不能忽视即使是很小的 CPU 用例,而且我们还有空间问题。在我运行代码后的回答中,如果我们需要渲染它,它永远不会在正文中考虑!它会像没有这样的代码一样消失!如果有条件,身体甚至感觉不到。
  • 这不是“糟糕的编码”(即使这是我的意见,我也会犹豫将某人的代码称为此处)。关于空间,如果 OP 想要 有空间怎么办?问题没有具体说明(考虑到他们接受了答案,我认为这是可行的)。上周我就遇到过这样的情况。假设系统优化了除了框架之外的任何东西以获得透明视图,我认为没有问题。
【解决方案2】:

这是您问题的正确答案:

struct CustomImageView: View {
    
    @State private var isImageHidden: Bool = Bool()

    var body: some View {
        
        print("rendering CustomImageView!")
        
        return VStack {
            
            if (!isImageHidden) {
                
                Image(systemName: "photo.fill")
                    .resizable()
                    .scaledToFit()
                    .frame(width: 200, height: 200)
                    .transition(AnyTransition.asymmetric(insertion: .opacity, removal: .opacity))
                    .onAppear { isImageHidden = true }
                
            }
            
        }
        .animation(.default.delay(5), value: isImageHidden)
  
    }
}

用例:

通过这个用例,您可以看到在第一次渲染后,视图将永远消失!对 ContentView 进行更多更新不会使 View 得到渲染!

struct ContentView: View {
    
    @State private var color: Color = Color.white
    @State private var stringTop: String = "Hello"
    @State private var stringBottom: String = "Hello"

    var body: some View {

        return  color
            .overlay(Text(stringTop).onTapGesture {
                stringTop += " updated!"; color = Color.blue
            }, alignment: .top)
            .overlay(CustomImageView())
            .overlay(Text(stringBottom).onTapGesture {
                stringBottom += " updated!"; color = Color.red
            }, alignment: .bottom)
        
    }
    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2021-06-29
    • 2023-01-28
    相关资源
    最近更新 更多