我需要模拟用户开车演示时应用程序的外观。我有一个MKMapView,我如何模拟用户驾驶的外观将使用map.userLocation功能,这显然在演示中不可用。
谢谢!
答案 0 :(得分:1)
无法在iPhone模拟器中进行模拟。您需要将其加载到您的设备上并四处移动。
答案 1 :(得分:1)
嗯,我得到了一些东西,我只是基本上做了这个
- (void)moveIcon:(MKAnnotationView*)locationView toLocation:(CLLocation*)newLoc
{
LocationAnnotation* annotation = [[[LocationAnnotation alloc] initWithCoordinate:newLoc.coordinate] autorelease];
[locationView setAnnotation:annotation];
[map setCenterCoordinate:newLoc.coordinate animated:YES];
}
然后我在我的所有顶点之间的循环中稍稍延迟地调用这个人。工作得很好。
答案 2 :(得分:0)
我不是iPhone开发专家,但地图视图如何接收坐标?如果是通过一个调用CoreLocation API的函数,你是否可能只编写一个函数,该函数以某个时间间隔随机生成经度和纬度值,并让你的地图视图从那里拉出坐标?只是一个想法。
答案 3 :(得分:0)
您还可以查看iSimulate声称能够模拟iPhone模拟器中iPhone上可用的多项功能,包括CoreLocation。我自己没试过,所以你的里程可能会有所不同。
答案 4 :(得分:0)
为了模拟驾驶,您需要建立两个基本功能:
从存档中读取CLLocations(使用设备在驱动器测试期间记录)。理想情况下,您将根据位置上的时间戳执行此操作,即再现在路测期间接收的完全相同的位置更新。
根据从日志中读取的位置更新MKAnnotationView在地图上的位置。
对于第1部分,请查看CLLocationDispatch,这是一个方便的类,它提供CLLocations的归档/取消归档,并将它们分派给一个或多个侦听器(使用CLLocationManagerDelegate协议)。
对于第2部分,请查看Moving-MKAnnotationView。
答案 5 :(得分:0)
我发现更好的方法是继承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并将其移动到地图上。
答案 6 :(得分:-1)
答案是否定的。那么,如何在代码和MKMapKit之间添加一个抽象层呢?你可以为你的目标做xUnit测试。