【发布时间】:2011-06-04 03:22:37
【问题描述】:
我在 IB 中定义了一个地图视图,它被设置为显示用户位置。
在我的应用程序中,在 -viewDidAppear 中,我查询 self.mapView.userLocation.location.coordinate 并返回疯狂的值,例如:
纬度:4.8194501961644877e-49
经度:2.2993313035571993e-59
但是,下次调用 -viewDidAppear 时(在我简单地移动到另一个选项卡式视图然后返回到这个视图之后),userLocation 属性恰好包含我当前位置的正确值。
似乎在我初次调用时,userLocation 属性尚未初始化,但尽管阅读了 Apple 的文档,但我看不到任何说明该属性仅有效的警告做完xxx之后。
在 userLocation 有效使用之前是否必须发生一些事情,或者我应该只使用 CLLocationManager 并询问它吗?
提前感谢您的帮助。
遗憾的是,Thomas 的建议没有帮助。我后来发现的是:
如果 showsUserLocation 为 NO,则永远不会正确设置 userLocation 并且永远不会调用 -MapView:didUpdateUserLocation:,因此我永远不会得到一个合理的位置值。
所以,要获取用户的位置,我必须将 showsUserLocation 设置为 YES,但这意味着在我的所有注释都添加到视图之后(不包括用户的位置),然后我会计算包含它们并以正确的缩放级别全部显示它们所需的跨度。不过,在我这样做之后,视图会随着地图视图横向跳跃,然后自动将用户的位置显示为蓝色斑点!由于它从未包含在注释中以计算缩放级别,因此我无法将其合并到我的计算中。啊!
请注意,当 showsUserLocation 为 YES 时,会调用 -MapView:didUpdateUserLocation:,但仅在我计算出所有注释的坐标之后,而不是之前!
【问题讨论】:
-
请注意,当 showsUserLocation 为 YES 时,-MapView:didUpdateUserLocation: 会被调用,但仅在我计算完所有注释的坐标之后,而不是之前! 那么,为什么不在第一次调用时计算注释的坐标?!大声笑...用这种方法计算它。 :p
-
嗨,Thomas - 确实!昨晚我再次查看代码并将 NSLog 语句放在周围,这也是我得出的结论!我会尽快回来报告的。再次感谢