【问题标题】:MKMapView questionsMKMapView 问题
【发布时间】:2009-07-22 19:36:37
【问题描述】:
几天来,我一直在模拟器中使用 MKMapView 控件 (SDK v3.0)。我已经能够映射任意位置、对其进行缩放、放置图钉并添加注释。但是,对于 MKMapView 控件本身(在模拟器之外)的全部功能,我仍然有些模糊。
如果选中 MKMapView 的“显示用户位置”属性,iPhone 模拟器会在 Apple 总部放置一个图钉。显然,模拟器实际上并未对手机的实际位置进行地理编码。
但是,这个功能是否意味着 MKMapView 有一个 CLLocationManager 的实例?换句话说,MkmapView会选择“显示用户位置”选项时,自动查找手机的位置并丢弃引脚?如果是这样,它是否会在不提示获取位置的许可的情况下执行此操作?我可以在 IB 中设置默认缩放级别吗?
感谢您的宝贵时间,
克雷格·布坎南
【问题讨论】:
标签:
iphone
iphone-sdk-3.0
mapping
【解决方案1】:
这是一个以编程方式缩放的示例(在 IB 中无法做到这一点):
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.02 / 10; // zoom level
span.longitudeDelta=0.02 / 10;
CLLocationCoordinate2D location;
location.latitude = latitude; // set these var's first!
location.longitude = longitude;
region.span=span;
region.center=location;
[mapView setRegion:region animated:TRUE];
[mapView regionThatFits:region];
我不确定这是否是您所追求的,但您是否尝试过 mapView.userLocation 存储的 CLLocation?
还请记住,在 iPhone 模拟器中,除非您(从 Xcode4 中)更改模拟用户的位置,否则引脚将始终落在 Apple HQ 上 - 这是 Xcode 控制台上方的位置服务箭头图标。使用设备时,坐标应该移动到您的 GPS 位置,具体取决于覆盖范围。
【解决方案2】:
它确实会定位用户的当前位置,并且会请求许可(不过,就像在所有其他应用程序中一样,我确信可以设置默认的“是”)。我几乎 100% 确定您不能在 IB 中设置缩放。我确信它在编程上很简单,但我(和你一样)在等待 Apple 在 MKMaps 上给我们一些 411!但我们总是可以不断地打字,直到有效果为止;-)
祝你好运!
【解决方案3】:
我不这么认为。在英国的手机上运行时,默认地图视图仍以无限循环为中心。
我尽量避免使用 IB 来处理这类事情并使用代码。
【解决方案4】:
在模拟器中,CLLocationManager 被硬编码以返回 Apple HQ 的修复。在真实设备上,CLLocationManager 将按精度顺序返回修复,Skyhook Wireless,然后是 Cell Mast 三角测量,最后是 GPS 子系统。请注意,并非所有设备都可用。 iPod Touch 仍然可以返回位置,但只能来自 Skyhook Wireless(即无线 AP 的注册位置)
模拟器只返回一个位置修复,如果你想在真实设备上看到正确的位置并放大你需要在 MKMapView 上设置用户位置标志时注册一个 CLLocationManagerDelegate,并让 CLLocationManager startUpdatingLocation。
使用接收到的更新和上面的代码来设置 MKMapView 的中心和跨度,以允许地图居中并放大该位置。最好将跨度设置为与您提供的定位精度有关的值,这样您就可以看到 GPS 定位的整个蓝色环,从而为用户提供有用的反馈。
【解决方案5】:
您不能在 IB 中设置默认缩放。
关于蓝点在 Apple 总部上方的位置,它仅在模拟器中执行此操作。在设备上,它会为您提供您的位置!