这是未记录的东西,所以我的猜测是 MKTeleportingUserLocation 是当您的手机/模拟器将 currentLocation 注释移动很远时替换旧的 currentLocation 注释的注释。表面上看,它负责缩小自己并将自己从 mapView 的注释数组中移除。
来自https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MapKit.framework/MKTeleportingUserLocationView.h
- (void)animationDidStop:(id)arg1 finished:(BOOL)arg2;
- (id)dotShrinkAnimation;
- (id)initWithFrame:(struct CGRect { struct CGPoint { float x_1_1_1; float x_1_1_2; } x1; struct CGSize { float x_2_1_1; float x_2_1_2; } x2; })arg1;
- (void)orderOut;
由此我推断,这个注解负责从 mapView 中缩小和移除自身。尝试更改模拟器中的坐标,然后观察 currentLocation 缩小为空。一旦有了新的 currentLocation,旧的就变成了 teleportingUserLocation 并缩小为空。
把这个
NSLog(@"%@", [self.mapView annotations]);
在你的
locationManager:didUpdateLocations:
或者
mapView:didUpdateUserLocation:
在模拟器中运行它,彻底改变坐标,这应该出现在日志中
2013-05-01 09:28:10.556 Breadcrumb[20222:c07] (
"<MKUserLocation: 0x8c40cf0>"
)
2013-05-01 09:28:10.931 Breadcrumb[20222:c07] (
"<MKUserLocation: 0x8c40cf0>",
"<MKTeleportingUserLocation: 0x18246480>"
)
2013-05-01 09:28:11.930 Breadcrumb[20222:c07] (
"<MKUserLocation: 0x8c40cf0>"
)
请注意,MKTeleportingUserLocation 在下一次更新中消失了。