1

我在注释列表中看到了这个

(lldb) po [self.theMapView annotations]
$6 = 0x20a61ff0 <__NSArrayM 0x20a61ff0>
(
<BGAddressAnnotation: 0x236fad50>,
<BGAddressAnnotation: 0x23646a00>,
<BGAddressAnnotation: 0x259f20f0>,
<BGAddressAnnotation: 0x259f7480>,
<BGAddressAnnotation: 0x25811390>,
<BGAddressAnnotation: 0x23646ad0>,
<MKUserLocation: 0x20a868d0>,
<MKTeleportingUserLocation: 0x258f64d0>
)

这会导致一些错误,因为我想获取所有不是 MKUserLocation 的注释。

我在谷歌搜索 MKTeleportingUserLocation 并找不到任何东西。

4

1 回答 1

2

这是未记录的东西,所以我的猜测是 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 在下一次更新中消失了。

于 2013-05-01T13:26:29.863 回答