在不限制滚动的情况下放大当前用户在 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 上的位置?的主要内容,如果未能解决你的问题,请参考以下文章