Luc*_*tti 9 objective-c uikit mkmapview ios
我有一个应用程序,我正在创建一个视图层次结构,我有一个mapview和一个tableview.mapview位于tableview下,当表垂直偏移为负时,它在顶部可见.视图的结构是这样的:
黄色是地图的地方,顶部的绿色是导航栏,底部的绿色是桌面视图.
滚动表格视图时,地图应显示地图可见部分中心的用户位置.
我遇到的问题是,当我应用视差时,地图中心不是我正在设置的位置.这是我用来隔离问题的示例项目的屏幕截图.中心坐标是白金汉宫.
橙色方块是一个调试视图,位于mapView的中心(中心坐标应该是).我确信视差效果是正确的.
关于示例项目中mapView的视图层次结构如下图所示.视图的位置反映了上面的截图.
以下代码用于设置mapContainerView的frame.origin.y值.我正在使用mapContainerView来避免触摸mapView的帧来执行视差效果.mapView是mapContainerView的子视图(在开始时我在mapView上使用了一个翻译,但是我改变了代码以试图找出这个问题的原因)
self.mapViewContainer.frame = CGRectMake(0, self.currentY, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame));
if (!CGRectEqualToRect(self.mapViewContainer.bounds, self.mapView.bounds)) {
self.mapView.bounds = CGRectMake(0,
0,
CGRectGetWidth(self.mapViewContainer.bounds),
CGRectGetHeight(self.mapViewContainer.bounds));
self.mapView.center = CGPointMake(CGRectGetMidX(self.mapViewContainer.bounds),
CGRectGetMidY(self.mapViewContainer.bounds));
}
self.squareView.bounds = CGRectMake(0, 0, 22.0f, 22.0f);
self.squareView.center = CGPointMake(CGRectGetMidX(self.mapViewContainer.bounds),
CGRectGetMidY(self.mapViewContainer.bounds));
Run Code Online (Sandbox Code Playgroud)
我的猜测是状态栏正在对mapView做些什么.如果您查看模拟器截图,您可以注意到中心坐标是如何精确定位在从状态栏到mapView底部的垂直空间的中心.
如果我在viewDidLoad中设置坐标的中心,则在创建地图后(当它的帧是CGRectZero时),地图的中心正确地位于地图的中心.
如果我稍后更改它(例如使用计时器,为了模拟位置更新,设置与viewDidLoad中设置的相同的地图区域),地图视图决定更改中心,如上所示.
我找不到任何方法来禁用或更改此行为.我在这里做错了吗?我正在努力解决方法,但我很想知道是否有人知道我在这里缺少什么.
这是我创建的示例项目的代码,用于在隔离场景中重现问题.https://gist.github.com/lucabartoletti/a5f103cb74a3edb178d6
我有一些限制.
小智 0
尝试这个:
_mapView.delegate = self;
func mapView(mapView: MKMapView!, didUpdateUserLocation
userLocation: MKUserLocation!) {
mapView.centerCoordinate = userLocation.location.coordinate
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |