swift - 如何在 Swift 中逐点画线

标签 swift multithreading mapkit

我意识到我在跟踪器应用程序中滥用了从服务器获取的数据。所以我有这个:

 @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/

相关文章:

objective-c - 如何将 url 中的图像添加到 MKAnnotationView 以进行视网膜显示?

iOS 8 自定义键盘应用程序扩展 - 更改方向高度

java - Java中无需等待的线程

c++ - 在 C++ 类中使用线程的段错误

Java/Android : Socket closed when offloading work to a thread pool

ios - Mapkit 中未解析的标识符

iOS 代码适用于 iOS 9 但不适用于 iOS 8?

swift 2 : CGEventSetFlags with multi CGEventFlags

ios - Swift 2 或 3 中的 Google Analytics 问题

swift - 将文本放在 MapView 上