是否可以在控制器中定期执行测试?

时间:2019-06-25 08:48:50

标签: swift xcode cllocationmanager

在我的应用程序中,我会获取用户移动时的坐标,以便向他显示他所走的轨迹。但是我的问题是要知道用户何时停止以停止当前轨迹并将其显示在地图上。

我知道用户何时开始其轨迹的代码运行得非常好,我使用didUpdateLocations进行了设置,distanceFilter为100。

我的问题是我不知道用户何时停止。 我想知道是否有一种解决方案,例如,什么时候知道我将不再获得任何更新位置,所以这意味着轨迹已结束。 我尝试使用locationManagerDidPauseLocationUpdates,但我的程序似乎从未进入此功能。

//这是我的代码,用于更新用户位置

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let mostRecentLocation = locations.last else {
        return
    }

    if !self.isTrajectStarted {

        if self.locations.count == 0 {
            print("First coordinate")

        } else if (self.locations.count == 1) {

            if self.locations[0].distance(from: mostRecentLocation)>150 { 
                print("traject begin")
            }
        }
    } else {
        print(" New location is %@", mostRecentLocation)
    }
}

1 个答案:

答案 0 :(得分:0)

编写新的逻辑以检测停止。

locationManagerDidPauseLocationUpdates,停止后不会立即被呼叫。通常在5分钟后调用(未记录,该数字是我在应用程序中看到的数字)。

您需要通过首先对旅行方式进行分类来编写逻辑。如果您的应用记录了用户在车辆中的运动,则您会知道,只要速度降至4-5 mph以下,用户就会处于交通信号灯或到达目的地。如果您在接下来的5分钟左右没有收到任何新更新,则可以将其视为停止,否则继续进行录制。

通过将motion sensor附加到您的逻辑中,尝试利用https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html的优势,它可以告诉您各种活动类型,例如步行,驾车,固定等。