簡體   English   中英

如何在Swift中逐點繪制線

[英]How to draw line point by point in Swift

我意識到自己在跟蹤器應用程序中濫用了從服務器檢索的數據。 所以我有這個:

 @objc private func updateOnlineTrackWithNewData() {

    print("Tick")

    if let track = track {

        guard track.status == 1 else { return } // is track online?

        serverManager.tracks.updateOnlineTrack(for: track, success: { (trackNewPoints) in 
       //receive new data

            guard trackNewPoints.count > 1 else { return }

            for point in trackNewPoints {

                self.track?.points?.append(point)

                self.performSelector(onMainThread: #selector(self.updateOnlineTrackOnMap), with: nil, waitUntilDone: true)

            }

        }) { (error) in

            print(error ?? "Error updating online track")

           }
    }
}

trackNewPoints基本上是我要附加到主“ track”上的點的數組,而updateOnlineTrackOnMap只是將其打印出來。 updateOnlineTrackWithNewData()函數由計時器觸發,一切正常。 但是我想逐點繪制線以模擬實時運動。 我該如何實現? performSelector似乎不起作用。

如果有幫助,每10秒我會獲得10個新點。

有一種方法可以做到這一點。 創建單獨的類抽屜

protocol Drawable { // add to your controller 
    func appendPoint(_ point: AnyObject)
    func updateOnlineTrackOnMap()
}

class Drawer {

    private var timer: Timer? = nil
    private var points: [AnyObject] = []

    func drawPoints(_ points: [AnyObject],
                    controller: Drawable) {
        self.points = points
        timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] timer in
            guard let point = self?.points.first else {
                timer.invalidate()
                return
            }
            DispatchQueue.global(qos: .userInteractive).async {
                controller.appendPoint(point)
                controller.updateOnlineTrackOnMap()
                self?.points.remove(at: 0)
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM