缩放以适合地图上的当前位置和注释

Wes*_*een 12 mapkit swift

我是swift(一般的iOS编程)的新手,我正在试图弄清楚如何缩放地图以适应地图上的2个点.

目前我有

var zoomRect = MKMapRectNull;
var myLocationPointRect = MKMapRectMake(myLocation.longitude, myLocation.latitude, 0, 0)
var currentDestinationPointRect = MKMapRectMake(currentDestination.longitude, currentDestination.latitude, 0, 0)

zoomRect = myLocationPointRect;
zoomRect = MKMapRectUnion(zoomRect, currentDestinationPointRect);
Run Code Online (Sandbox Code Playgroud)

什么也没做.

我必须以zoomRect某种方式申请地图吗?

小智 31

self.mapView.showAnnotations(self.mapView.annotations, animated: true)
Run Code Online (Sandbox Code Playgroud)


zis*_*oft 6

MKMapRectUnion计算并返回一个新的rect,仅此而已.您需要告诉mapView将其可见区域设置为新的rect:

myMapView.setVisibleMapRect(zoomRect, animated: true)
Run Code Online (Sandbox Code Playgroud)

  • 它显示没有注释的垂直条带? (2认同)

Vis*_*ngh 6

使用下面的 MKMapView 扩展 -

extension MKMapView
{
    func fitAllMarkers(shouldIncludeCurrentLocation: Bool) {

        if !shouldIncludeCurrentLocation
        {
            showAnnotations(annotations, animated: true)
        }
        else
        {
            var zoomRect = MKMapRectNull

            let point = MKMapPointForCoordinate(userLocation.coordinate)
            let pointRect = MKMapRectMake(point.x, point.y, 0, 0)
            zoomRect = MKMapRectUnion(zoomRect, pointRect)

            for annotation in annotations {

                let annotationPoint = MKMapPointForCoordinate(annotation.coordinate)
                let pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0)

                if (MKMapRectIsNull(zoomRect)) {
                    zoomRect = pointRect
                } else {
                    zoomRect = MKMapRectUnion(zoomRect, pointRect)
                }
            }

            setVisibleMapRect(zoomRect, edgePadding: UIEdgeInsetsMake(8, 8, 8, 8), animated: true)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)