userLocation上的MKMapView中心(最初) - 仅适用于iPhone 4?

时间:2011-02-23 22:31:53

标签: iphone ios geolocation mkmapview userlocation

我实现了以下MKMapView方法,该方法在添加注释后运行。我在接口生成器中将我的MKMapView地图(parishMap)设置为“显示用户位置”,并且在加载地图视图时,蓝点总是出现在地图视图的一秒左右。

以下是我在Map View控制器实现中的代码:

// Center map on user location (initially)
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    for(MKAnnotationView *annotationView in views) {
        if(annotationView.annotation == parishMap.userLocation) {
            MKCoordinateRegion region;
            MKCoordinateSpan span;

            span.latitudeDelta=0.03;
            span.longitudeDelta=0.03;

            CLLocationCoordinate2D location=parishMap.userLocation.coordinate;

            location = parishMap.userLocation.location.coordinate;

            region.span=span;
            region.center=location;

            [parishMap setRegion:region animated:TRUE];
            [parishMap regionThatFits:region];
        }
    }
}

当我在iPhone 4上打开mapview时,mapview总是(并且几乎立即)移动到userLocation点的中心。但是,当我在iPhone 3Gs或iPod Touch(2010)上打开mapview时,它不会以userLocation为中心,而只是停留在我为地图视图设置的默认缩放/区域。

关于为什么这段代码不能用于非iPhone 4设备的任何想法(它们都运行4.2.x最新的iOS)?

2 个答案:

答案 0 :(得分:2)

这可能是GPS在这些不同设备上锁定位置所需时间的问题。

我建议使用CLLocationManager及其委托方法使地图居中。

您可以通过创建CLLocationManager实例,将其delegate属性设置为self然后实现来开始更新位置:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

根据最新的位置更新,您可以相应地将地图居中。

答案 1 :(得分:-1)

您是否尝试过使用此代码将地图居中:

[mapView setCenterCoordinate:location animated:YES];

我不确定为什么它适用于iPhone 4而不是其他产品,但这是我用来调整区域的代码:

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(location, 0.03, 0.03);
    MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];

    [mapView setRegion:adjustedRegion animated:YES];

尝试这种方式,看看它是如何工作的。你在做regionThatFits方法的方式,实际上不应该是方法的使用方式。您可以尝试注释掉代码的最后一行,它应该没有区别。无论如何,尝试使用我刚给出的方法,如果您有任何问题,请告诉我。