Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在MKMapView中模拟用户驾驶路线?_Iphone_Objective C_Mapkit_Mkmapview - Fatal编程技术网

Iphone 如何在MKMapView中模拟用户驾驶路线?

Iphone 如何在MKMapView中模拟用户驾驶路线?,iphone,objective-c,mapkit,mkmapview,Iphone,Objective C,Mapkit,Mkmapview,我需要模拟我的应用程序在用户开车四处观看演示时的样子。我有一个MKMapView,我怎样才能模拟一个开车的用户的样子,这个用户将使用map.userLocation功能,这在演示中显然是不可用的 谢谢 无法在iPhone模拟器中进行模拟。您需要将其加载到设备上并四处移动。我不是iPhone开发专家,但地图视图如何接收坐标?如果它是通过一个调用CoreLocation API的函数实现的,那么您是否可以编写一个函数,在某个时间间隔随机生成经度和纬度值,并让地图视图从中提取坐标?只是想一想。你还可以

我需要模拟我的应用程序在用户开车四处观看演示时的样子。我有一个MKMapView,我怎样才能模拟一个开车的用户的样子,这个用户将使用map.userLocation功能,这在演示中显然是不可用的


谢谢

无法在iPhone模拟器中进行模拟。您需要将其加载到设备上并四处移动。

我不是iPhone开发专家,但地图视图如何接收坐标?如果它是通过一个调用CoreLocation API的函数实现的,那么您是否可以编写一个函数,在某个时间间隔随机生成经度和纬度值,并让地图视图从中提取坐标?只是想一想。

你还可以在iPhone模拟器中查看哪些功能声称能够模拟iPhone上仅有的几个功能,包括CoreLocation。我自己没有试过,所以你的里程数可能会有所不同。

我做了一些事情,基本上就是这么做的

- (void)moveIcon:(MKAnnotationView*)locationView toLocation:(CLLocation*)newLoc
{
    LocationAnnotation* annotation = [[[LocationAnnotation alloc] initWithCoordinate:newLoc.coordinate] autorelease];
    [locationView setAnnotation:annotation];
    [map setCenterCoordinate:newLoc.coordinate animated:YES];
}

然后我在我所有顶点之间的循环中调用这个家伙,稍微延迟一下。非常有效。

答案是否定的。那么,在代码和MKMapKit之间添加一个抽象层怎么样?您可以针对您的目标进行xUnit测试。

为了模拟驾驶,您需要建立两个基本功能:

  • 从存档中读取位置(在使用设备进行驱动器测试期间记录)。理想情况下,您将根据位置上的时间戳执行此操作,即再现在驾驶测试期间接收到的完全相同的位置更新

  • 根据从日志中读取的位置更新MKAnnotationView在地图上的位置

  • 对于第1部分,请看一个方便的类,它提供CLLocation的存档/取消存档,并将它们发送给一个或多个侦听器(使用CLLocationManagerDelegate协议)


    对于第2部分,请看。

    我发现更好的方法是将
    MKUserLocation
    子类化:

    class SimulatedUserLocation: MKUserLocation {
        private var simulatedCoordinate = CLLocationCoordinate2D(latitude: 39, longitude: -76)
        override dynamic var coordinate: CLLocationCoordinate2D {
            get {
                return simulatedCoordinate
            }
            set {
                simulatedCoordinate = newValue
            }
        }
    }
    
    然后将其添加为注释
    mapView.addAnnotation(SimulatedUserLocation())
    。(您可能还想先隐藏真实位置
    mapView.showsUserLocation=false

    iOS将呈现与真实用户位置完全相同的注释


    dynamic
    用于属性,因此更改坐标会触发KVO并在地图上移动它。

    我的意思不是使用CoreLocation来精确模拟它,而是通过某种方式来设置移动的管脚的动画。MapKit地图对于您放置的管脚是这样工作的,但是当您将自己的位置放入(蓝色圆圈)中时,MapKit在内部使用CoreLocation服务。不幸的是,这不起作用。它通过一个自定义注释接收它们,该注释的所有内部都是隐藏的,因此无法进行模拟。