2

我正在尝试重新定位我的 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)

任何帮助都会很棒,谢谢。

4

0 回答 0