2012-01-16 122 views
2

有没有人有一个例子,如何使用MKMapView上的annotationVisibleRect属性将MKMapView缩放到所有可见注释的区域?我见过this post,它提供了一个体面的解决方案,但是看起来这个annotationVisibleRect属性是最简单的解决方案。MKMapView缩放到注解 - annotationVisibleRect

+0

链接帖子中的第二个答案就是你要找的。但是,设置region或visibleMapRect并没有什么不同。 – Anna 2012-01-16 15:39:30

+0

虽然它没有解决如何使用annotationVisibleRect属性。那真是我正在寻找的东西。 – 2012-01-21 23:48:27

回答

10

简短回答:使用annotationVisibleRect没有解决此问题的方法。

没有例子,因为这个属性不能以这种方式使用。提供给它的有限文档对于正在从MapKit寻找便利的人来做一些常见任务肯定会产生误导。

annotationVisibleRect是关于MKAnnotationContainerView坐标系的矩形。 MKAnnotationContainerView是您的注释的超级视图。如果您在MKMapView.h看,你会发现这一点:

// annotationVisibleRect is the visible rect where the annotations views are currently displayed. 
// The delegate can use annotationVisibleRect when animating the adding of the annotations views in mapView:didAddAnnotationViews: 
@property (nonatomic, readonly) CGRect annotationVisibleRect; 

其具体目的在其上海华盈的坐标系统,地图视图的视口匹配提供了一个矩形是的注解视图操作(动画)。

你可能会想(像我一样),这或类似的将这样的伎俩:

CGRect visibleRect = self.mapView.annotationVisibleRect; 
MKCoordinateRegion visibleRegion = [self.mapView convertRect:visibleRect toRegionFromView:self.mapView]; 
[self.mapView setRegion:visibleRegion animated:YES]; 

不会。调用setRegion:animated:可能导致应用程序崩溃,因为“fromView”是不正确的坐标系,并可能导致经度或纬度超过其最小值/最大值。你实际上必须这样做:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
    if(views.count > 0) { 
     MKAnnotationView *view = [views objectAtIndex:0]; 
     CGRect visibleRect = self.mapView.annotationVisibleRect; 
     MKCoordinateRegion visibleRegion = [self.mapView convertRect:visibleRect toRegionFromView:view.superview]; 
     [self.mapView setRegion:visibleRegion animated:YES]; 
    } 
} 

这不会使应用程序崩溃,但它也不会改变区域。如果您将visibleRegionself.mapView.region进行比较,您会发现它们是相同的。这是因为annotationVisibleRect表示与地图视图中显示的区域相同 - 只是在不同的坐标系中,以便您可以方便地进行操作,例如使地图引脚从视图的边缘飞入。有关如何使用它的详细信息,请参见this answer

此外,仅供参考,这里的地方MKAnnotationView坐相对于MKMapView

MKMapView 
+-UIView 
    +-MKScrollContainerView 
    +-MKAnnotationContainerView <-- coordinate system of annotationVisibleRect 
     +-MKAnnotationView 

希望帮助明确一些事情了 - 如果没有,问了。

+0

感谢您的详细回复。我早已将这些代码留在尘土中,但您的解释有很大帮助。如果我回到该代码,我将确保引用您的帖子。 – 2012-11-16 16:43:56

+0

np,我寻找了一段时间才找到答案,所以我确信其他人会在某处绊跌。 – Mark 2012-11-19 15:18:15

0

SWIFT 4

我觉得你想找的是

mapView.showAnnotations(annotations:[MKAnnotation], animated: Bool) 

您只需通过在所有注释的数组你想显示这是MKMapView.annotations

mapView.showAnnotations(mapView.annotations, animated: true)