SwiftUI:如何使用计时器在多个位置创建多个视图?

问题描述 投票:1回答:1

可以很容易地以老式的速度准备以下任务:每三秒钟,一个新视图(子视图)将出现在一个新位置。这是一个代码:

import UIKit

class ViewController: UIViewController {

var someView = UIView()
var posX : CGFloat = 10
var posY : CGFloat = 10
var timer:Timer!
var loopCount = 1


override func viewDidLoad() {
    super.viewDidLoad()

    startTimer()
    view.backgroundColor = .purple

}

func setView() {
    someView = UIView(frame: CGRect(x: posX, y: posY, width: 10, height: 10))
    someView.backgroundColor = UIColor.orange
    view.addSubview(someView)
}

func startTimer() {
    if timer == nil {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(loop), userInfo: nil, repeats: true)
    }
}

@objc func loop(){
    if (loopCount % 3 == 0) {
        posX += 15
        posY += 15
        setView()
    }
    loopCount += 1
 }


 }

SwiftUI使许多事情变得容易得多,但是恐怕没有这一点。至少到目前为止,我还没有找到一种简单的方法来解决它。有人知道吗?

此处是显示结果的屏幕(几秒钟后:)>

enter image description here

可以很容易地以老式的速度准备以下任务:每三秒钟,一个新视图(子视图)将出现在一个新位置。这是一个代码:import UIKit class ViewController:...

view timer position swiftui repeat
1个回答
1
投票

这里是可能的方法(已通过Xcode 11.2 / iOS 13.2测试)。 SwiftUI是反应性的概念,因此它不是在视图模型中添加新位置,而是在视图模型和SwiftUI视图中添加了新位置,以响应视图模型中的此更改而在新添加的位置处刷新自身并添加新视图(在本例中为Rectangle)。

© www.soinside.com 2019 - 2024. All rights reserved.