首页 > 解决方案 > Swiftui - 如何将 Timer.scheduledTimer 应用于每隔 n 秒制作一次 UiView

问题描述

我是 swiftUI 的新手,可以像我在 UIkit 中所做的那样制作视图。尝试了几乎几个小时都没有成功。

这是我在 UIkit 中的代码,在我的项目中运行良好。

  var positionY = self.view.frame.height
     let timer = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: true) { (timer) in
           // do stuff 3 seconds later
         positionY = positionY - 50
        let bubble = UIView(frame: CGRect(x: self.view.frame.width/2, y:  positionY, width: 50, height: 50))
        bubble.backgroundColor = UIColor.red
        self.view.addSubview(bubble)
       
      }
    
    RunLoop.current.add(timer, forMode: .common)

现在我正在开发 SwiftUI。我在我的 swiftUI 项目上需要相同的行为,因为我在这段代码上做了很多事情。

标签: swiftswiftuiuiview

解决方案


根据您的要求自定义它:

struct ContentView: View {
    
    @State private var positionYOffset: CGFloat = 0
    private let timer = Timer.publish(every: 3, on: .main, in: .common).autoconnect()
    var body: some View {
        
        GeometryReader { geometry in
            
            Rectangle()
                .fill(Color.red)
                .frame(width: 50, height: 50)
                .position(x: geometry.size.width/2, y: geometry.size.height - positionYOffset)
        }.onReceive(timer) { _ in
           positionYOffset += 50
        }
    }
}

推荐阅读