所有 我需要在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];
}
它的工作 但它不是中心用户位置 如何降低这一点。任何人都可以解决这个问题
答案 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];