在不限制滚动的情况下放大当前用户在 MapView 上的位置?

Posted

技术标签:

【中文标题】在不限制滚动的情况下放大当前用户在 MapView 上的位置?【英文标题】:Zoom into current user's location on MapView without restricting scrolling? 【发布时间】:2016-12-03 18:54:58 【问题描述】:

我正在使用以下代码放大用户在 MapView 上的当前位置。它工作得很好,但是我仍然希望我的用户也能够滚动到设置的区域之外(例如,这样他们就可以在地图上看到其他用户)。现在,如果我的用户滚动到设置区域之外,MapView 会将用户恢复到设置区域内。如何执行以下代码(放大到用户的位置),同时仍然允许他们滚动到设置的区域之外?

MapViewController.m

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation


    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 1300, 1300);
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];



【问题讨论】:

【参考方案1】:

我编写了一个简短的简单应用程序,它将显示用户位置并跟踪用户位置。只要您不滚动地图视图,该应用程序就会专注于用户位置并保持用户位置居中。

一旦您开始滚动,地图视图就会远离用户位置并保持不变,因为地图视图不会自动向后移动。为了使您能够返回到用户位置,我添加了一个名为“焦点”的按钮,该按钮将地图视图居中返回到用户位置,并使地图再次聚焦于用户位置,直到您再次开始滚动。

这个应用程序其实很简单,它使用了 MKMapView 中的两个属性:

var showUserLocation: Bool get set
var userTrackingMode: MKUserTrackingMode get set

当然,您可以通过设置区域进一步放大用户位置,但使用 setRegion(_:animated:) 很容易做到这一点。

您可以在 Github here 上找到代码并下载它以查看其工作原理。您可以使用模拟器轻松地对此进行测试。

如果这有帮助,请告诉我。

【讨论】:

哦,有道理。也就是说,如果我将代码移动到 viewWillAppear,userLocation 现在是未定义的吗?我应该如何在 viewWillAppear 中重新定义它(因为我现在正在终止那个 void 方法)? 对不起,用户位置未定义是什么意思? 请看我最后的补充。这能回答你的问题吗? 当我摆脱这一行时:(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 并将 MKCoordinateRegion 移动到 viewDidAppear,XCode 向我抛出一个错误,上面写着“使用未声明标识符用户位置”。那么如何更改 MKCoordinateRegion 线以消除此错误? 是的,我明白了。明天我会给你写一些替代代码。现在在欧洲已经很晚了。

以上是关于在不限制滚动的情况下放大当前用户在 MapView 上的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不滚动选择器视图的情况下选择当前时间

如何在不连接它们的情况下在 MapView 上绘制两个 MKPolygons?

在不干扰平移的情况下向 MKMapView 添加左滑动手势

无法让 MapView 放大当前位置 - SWIFT

如何在不向用户显示视图的情况下捕获整个滚动视图的图片

在不中断用户滚动的情况下将单元格添加到 UITableView 的顶部