2

我实现了以下 MKMapView 方法,该方法在添加注释后运行。我在 Interface Builder 中将我的 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) 上打开地图视图时,它不会以 userLocation 为中心,而是停留在我为地图视图设置的默认缩放/区域。

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

4

2 回答 2

2

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

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

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

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

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

于 2011-02-23T23:26:14.140 回答
-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 方法的方式实际上不应该是该方法的使用方式。您可以尝试注释掉代码的最后一行,它应该没有什么区别。无论如何,用我刚刚给出的方法尝试一下,如果您有任何问题,请告诉我。

于 2011-02-23T22:57:43.963 回答