我正在尝试重新定位我的 MKMapView 以在视图底部显示当前选定的注释。我遇到的问题是地图有任何旋转。它只会旋转回默认位置,然后停止并且不会将 mapView 移动到正确的新位置。如果 mapView 没有旋转,它工作正常。有点难以解释。
这是用于重新定位 mapView 的代码
//pinCoord are the coordinates from the selected annotation
let mapRect = myMap.visibleMapRect
let point = MKMapPointForCoordinate(pinCoord)
let nPx = point.x - mapRect.size.width*0.5
let nPy = point.y - mapRect.size.height*0.95
let newMapRect = MKMapRectMake(nPx, nPy, mapRect.size.width, mapRect.size.height)
myMap.setVisibleMapRect(newMapRect, animated: true)
这是我之前尝试过的代码,它适用于任何旋转。但是当 mapView 有任何倾斜时会出现问题。所以我决定使用上面的代码(虽然它会更简单)。
let pinCGPoint = myMap.convertCoordinate(pinCoord, toPointToView: self.view)
let currentCenterPoint = myMap.convertCoordinate(myMap.centerCoordinate, toPointToView: self.view)
//create new y center point
let point2y = view.frame.height - pinCGPoint.y
let nYp = currentCenterPoint.y - point2y
//create new x center point
let c2pX = currentCenterPoint.x - pinCGPoint.x
let pointX = view.frame.width*0.5 - pinCGPoint.x
let nXp = currentCenterPoint.x - pointX
let newCenter = CGPointMake(nXp, nYp)
let coord2 = myMap.convertPoint(newCenter, toCoordinateFromView: self.view)
myMap.setCenterCoordinate(coord2, animated: true)
任何帮助都会很棒,谢谢。