MKMapView中userLocation的中心区域

时间:2011-05-13 19:04:15

标签: objective-c ios location mkmapview userlocation

我很困惑。我有一个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中设置用户位置有什么问题?有人注意到我做错了吗?

2 个答案:

答案 0 :(得分:3)

来自MKUserLocation documentation

  

位置

     

设备的当前位置。 (只读)

     

@property (readonly, nonatomic) CLLocation *location

     

<强>讨论

     

如果地图视图当前未显示用户位置或尚未确定用户的位置,则此属性包含nil。

MKMapView(或CLLocationManager)需要几秒钟来修复用户的位置,并且可能需要几次尝试才能获得相对准确的修复。您最好的选择可能是创建一个CLLocationManager对象,为其指定一个委托,然后在locationManager:didUpdateToLocation:fromLocation:方法触发时缩放地图。

答案 1 :(得分:0)

您也应该为该地区设置span。将其设置为某个仲裁值,例如latitudeDelta = 0.01latitudeDelta也是如此)。

另外,从gotoLocation内部调用– locationManager:didUpdateToLocation:fromLocation:(如果您使用的是位置管理员)。这样,只有拥有有效的用户位置时才会调用它。