我很困惑。我有一个MKMapView,在viewDidLoad方法中我有:
- (void)viewDidLoad {
mainDelegate = (PublicArtOmahaAppDelegate*)[[UIApplication sharedApplication]delegate];
XMLController *myXMLController = [[XMLController alloc] init];
[myXMLController parse];
mapView.showsUserLocation = YES;
[self gotoLocation];
// add annotations to map
[self.mapView addAnnotations:mainDelegate.mapAnnotations];
[myXMLController release];
}self gotoLocation呼叫:
- (void)gotoLocation
{
MKCoordinateRegion newRegion;
CLLocation *userLocation = mapView.userLocation.location;
float latitude = userLocation.coordinate.latitude;
float longitude = userLocation.coordinate.latitude;
newRegion.center.latitude = latitude;
newRegion.center.longitude = longitude;
[self.mapView setRegion:newRegion animated:YES];
}因此,我认为当mapView加载时,地图应该以用户的位置为中心,并且我还计划在屏幕上实现一个按钮,该按钮将在用户需要时再次手动调用gotoLocation来更新用户的位置。
但是..。当我在一台设备上运行这个应用程序时,它会加载位于非洲西部一片海域的地图,这片海域显然是横向和纵向的0,0。我觉得奇怪的是,当我放大到我的真实位置时,它已经正确地将我的位置定位为注释。所以我猜我在gotoLocation中设置用户位置的方式有问题?有没有人注意到我做错了什么?
发布于 2011-05-14 03:41:06
从MKUserLocation documentation
位置
设备的当前位置。(只读)
@property (readonly, nonatomic) CLLocation *location
讨论
如果地图视图当前未显示用户位置或尚未确定用户位置,则此属性包含nil。
MKMapView (或CLLocationManager)需要几秒钟才能确定用户的位置,而且可能需要几次尝试才能获得相对准确的位置。最好的方法可能是创建一个CLLocationManager对象,为其分配一个委托,然后在触发locationManager:didUpdateToLocation:fromLocation:方法时缩放地图。
发布于 2011-05-14 04:00:49
您还应该为该区域设置span。将其设置为某个任意值,如latitudeDelta = 0.01 (对latitudeDelta也是如此)。
另外,从– locationManager:didUpdateToLocation:fromLocation:内部调用gotoLocation (如果您使用的是位置管理器)。这样,您将只在拥有有效的用户位置时调用它。
https://stackoverflow.com/questions/5996582
复制相似问题