【问题标题】:iOS mapview - zoom to pin and then activate calloutiOS mapview - 缩放到固定然后激活标注
【发布时间】:2015-10-24 10:51:58
【问题描述】:

我在 xcode 中有一个地图视图,一切正常。

我的页面刚才是这样的:

  1. 从后端数据库下载大量数据和位置
  2. 使用位置和放置图钉填充地图视图
  3. 在地图视图下方填充表格

一切都很好,我最终得到了一个带有大量图钉的地图视图,以及一个包含这些图钉详细信息的表格视图。

我现在想做的是让用户点击表格视图中的一行,并让地图缩放并居中到相应的地图图钉,然后自动激活注释图钉标注。

在我的“didselectrow”方法中,我有以下内容:

MKCoordinateSpan span = MKCoordinateSpanMake(0.1f, 0.1f);
CLLocationCoordinate2D coordinate = { [item.latitude floatValue], [item.longitude floatValue] };
MKCoordinateRegion region = { coordinate, span };
[self.mapView setRegion:region animated:YES];

这也很好用。点击表格行将缩放至此位置的地图图钉并将其居中。

我只是无法让触发注释引脚标注的最后一步起作用。

我试过了:

[mapview annotationsInMapRect:mapview.visibleMapRect];

但这不起作用,可见区域中可能仍有 2 或 3 个地图图钉。

我需要做的是让 pin 最靠近中心位置(见上文 - item.latitude / item.longitude)以自动打开它的标注。

代码中的所有内容都已设置并正常工作,并且地图图钉具有在点击时触发的标注,我只需要在最靠近中心位置的图钉自动打开的最后阶段。

有人可以帮忙吗?

我已经尝试过关于 SO 的各种其他建议,但似乎没有一个符合这个要求。

【问题讨论】:

  • 您的意思是,当您点击tableView 单元格时,您希望地图缩放到该位置,并且与该位置关联的图钉应显示标注。
  • 没错。我有第一个工作。点击 tableview 将缩放到正确的位置。我只需要让最后一部分工作,这样该位置的图钉就会自动显示标注。

标签: ios objective-c mkmapview


【解决方案1】:

我想我已经为你的问题找到了解决方案,你需要使用这个[_mapView setSelectedAnnotations:@[[[self.mapView annotations] lastObject]]];

为了测试我有created an small project that have these 2 methods

- (IBAction)buttonTouched:(id)sender {
    [_mapView showAnnotations:[self.mapView annotations] animated:YES];
    [self performSelector:@selector(showAnnotationCallOut) withObject:nil afterDelay:1.0f];
}

- (void) showAnnotationCallOut {
    [_mapView setSelectedAnnotations:@[[[self.mapView annotations] lastObject]]];
}

注意:我只调用了一个注释来测试我调用最后一个对象的原因。您需要为注释数组的特定注释调用它。

编辑:根据 Richerd 的评论,这里是找到注释并显示标注问题的解决方案。

    for (MapViewAnnotation *annotion in [self.mapView annotion]) {
        if ([annotion.identifire isEqualToString:annotationToCallCallOutIdentifier]) {
            //[_mapView setSelectedAnnotations:@[annotation]];
            [_mapView selectAnnotation:annotation animated:YES];
            break;//don't break if there are can be more than one callouts
        }
    }

【讨论】:

  • 问题是在特定位置选择地图图钉。此方法将始终调用最后删除的注释。
  • 我知道.. 所以你可以做一件事为你的注释分配一个Id,并在用户点击单元格时搜索Id,这样你就会知道哪个注释显示标注。这有意义吗。
  • 这是我遇到的问题 - 调用某个地图引脚来触发其注释。关于如何搜索特定注释 ID 并仅设置该 ID 的任何想法?
  • 我可以从我的注释数组中知道我想触发哪个 pin id。所以我只需要知道如何选择和触发这个特定的注释标注。
  • 试试这个:[mapView selectAnnotation:annotation animated:YES],我也更新了最后一段代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2012-06-13
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多