显示多个注释,其中心位于用户位置

时间:2013-01-21 22:12:09

标签: ios map annotations mkmapview user-location

所有 我需要在mapview中显示多个注释并缩放以显示所有这些注释。 我有前面的代码

MKMapRect zoomRect = MKMapRectNull;

int i = 0;
for (Post *post in _allPostsToList) {
    if (((post.location2D.latitude == 0.0f)&&(post.location2D.longitude == 0.0f))||(!CLLocationCoordinate2DIsValid(post.location2D))) {
        i++;
        continue;
    }
    MyAnnotation *annotation = [[MyAnnotation alloc] initWithpost:post];
    annotation.tag = i++;
    [mapView addAnnotation:annotation];

    MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
    MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
    zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
}
[mapView setVisibleMapRect:zoomRect animated:YES];

它工作正常但是,我还需要一件事,在地图中心需要用户位置蓝色气泡,并显示上述所有注释。 这该怎么做。 我试过这个

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
        MKMapRect zoomRect = mapView.visibleMapRect;
        MKMapPoint annotationPoint = MKMapPointForCoordinate(newLocation.coordinate);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
        zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
        [mapView setVisibleMapRect:zoomRect animated:YES];
        [manager stopUpdatingLocation];

   }

它的工作 但它不是中心用户位置 如何降低这一点。任何人都可以解决这个问题

2 个答案:

答案 0 :(得分:1)

didUpdateToLocation中,您获得当前可见的Rect(zoomRect),如果它不为null,则您将其与pointRect和缩放/平移相连。怎么会最终集中在pointRect上?只有当他们两个拥有完全相同的中心时才会发生。

如果您希望以用户位置为中心但显示所有点,则可以获得点与用户位置的最大距离,并创建一个具有中心和跨度的maprect来匹配。但是如果这些点都在一个方向上关闭并且用户位置在屏幕中间,则屏幕的另一侧被浪费了。

答案 1 :(得分:0)

只是赌注;如何访问mapView的区域并尝试设置新的中心:

MKCoordinateRegion region = mapView.region;
region.center = newLocation.coordinates;
[mapView setRegion:region animated:YES];