swift - 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 项目上需要相同的行为,因为我在这段代码上做了很多事情。
解决方案
根据您的要求自定义它:
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
}
}
}
推荐阅读
- reactjs - React-router-dom 仅来自应用程序而不是来自 url 的访问页面
- google-chrome - chrome://webrtc-internal 如何测量往返时间?
- python - 如何将值保存在关联数组中?
- google-apps-script - Google App Scripts:如何根据单元格中的值将一行复制到新选项卡中的下一个可用行
- ios - 登录错误:操作无法完成。(com.facebook.sdk.core 错误 3。)斯威夫特
- apache-flink - Flink:如何使用键/值存储转换 DataStream?
- javascript - 如何补间/动画雾three.js
- python - smooth_l1_loss 函数如何处理张量?
- sql - GridDB 是否支持过程 Sql (PL/SQL)?
- java - 如何区分被转换为不同子类对象的父类?