我意识到我在跟踪器应用程序中滥用了从服务器获取的数据。所以我有这个:
@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 基本上是我附加到主“轨道”的点数组,而 updateOnlineTrackOnMap 只是将其打印出来。 updateOnlineTrackWithNewData() 函数由计时器触发,一切正常。但我想逐点画线来模拟实时运动。我怎样才能做到这一点? performSelector 似乎不起作用。
如果有帮助的话,我每 10 秒就有 10 个新点左右。
最佳答案
只有一种方法可以做到。创建单独的类 Drawer
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)
}
}
}
}
关于swift - 如何在 Swift 中逐点画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765377/