gpt4 book ai didi

MKMapView 缩放到注释 - annotationVisibleRect

转载 作者:行者123 更新时间:2023-12-02 06:06:31 25 4
gpt4 key购买 nike

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

最佳答案

简短回答:使用 annotationVisibleRect 无法解决此问题.

没有示例,因为不能以这种方式使用此属性。为它提供的有限文档对于那些正在从 MapKit 寻找方便的东西来完成一些常见任务的人来说肯定会产生误导。
annotationVisibleRect是关于 MKAnnotationContainerView 的矩形坐标系。 MKAnnotationContainerView是您的注释的 super View 。如果你查看 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;

它的特定目的是通过在其父 View 的坐标系中提供一个与 map View 的视口(viewport)相匹配的矩形来操作(动画)注释 View 。

你可能会认为(就像我一样)这个或类似的方法可以解决问题:

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表示在 map View 中可见的相同区域 - 只是在不同的坐标系中,以便您方便地执行诸如使 map 针从 View 边缘飞入之类的操作。见 this answer有关如何使用它的详细信息。

另外,作为引用,这里是 MKAnnotationViewMKMapView 有关:

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

希望这有助于澄清一些事情——如果没有,请走开。

关于MKMapView 缩放到注释 - annotationVisibleRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com