MKMapView可见区域填充

Ale*_*xey 8 mkmapview ios google-maps-sdk-ios swift

德拉同事,

我很难用原生MKMapView实现可见区域.我需要具有与Google Map SDK可见区域完全相同的功能.

在此输入图像描述

基本上它意味着在底部有一种填充到下面的代码:

let span = MKCoordinateSpan(latitudeDelta: 0.8, longitudeDelta: 0.8)
let reg = MKCoordinateRegion(center: someMyCoordinate, span: span)
mapView.setRegion(reg, animated: true)
Run Code Online (Sandbox Code Playgroud)

它必须是这样的:一旦我在UIView坐标中添加了一些填充,它应该移动地图中心并调整缩放以使坐标区域完全可见,同时考虑填充.

可能我的描述有点乱,但如果你看一下这个视频就会变得非常清楚.

先感谢您!

Ale*_*xey 10

由于上面建议的方法,完整的解决方案如下.

import Foundation
import MapKit
extension MKCoordinateRegion{
    var mapRect:MKMapRect {
        get{
            let a = MKMapPointForCoordinate(CLLocationCoordinate2DMake(
                   self.center.latitude + self.span.latitudeDelta / 2,
                   self.center.longitude - self.span.longitudeDelta / 2))

            let b = MKMapPointForCoordinate(CLLocationCoordinate2DMake(
                    self.center.latitude - self.span.latitudeDelta / 2,
                    self.center.longitude + self.span.longitudeDelta / 2))

            return MKMapRectMake(min(a.x,b.x), min(a.y,b.y), abs(a.x-b.x), abs(a.y-b.y))
        }
    }
}

extension MKMapView {
    func setVisibleRegion(mapRegion: MKCoordinateRegion, edgePadding insets: UIEdgeInsets, animated animate: Bool) {
        self.setVisibleMapRect(mapRegion.mapRect, edgePadding: insets , animated: animate)
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以使用setVisibleRegion func.


mad*_*adx 8

如果您需要快速从 100 底部开始填充,您可以简单地编写:

mapView.layoutMargins = UIEdgeInsets(top: 10, right: 10, bottom: 100, left: 10)
Run Code Online (Sandbox Code Playgroud)

然后你可以检查这个以地图为中心的一些注释,如下所示:

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


小智 6

如果您打印可见区域,您将看到跨度将被填充,因为它需要适合视图.中心坐标仍将位于视图的中心.我不确定你想做什么,但我想它可以存档

setVisibleMapRect:edgePadding:animated:
Run Code Online (Sandbox Code Playgroud)

您需要将区域转换为MKMapRect.请参阅将MKCoordinateRegion转换为MKMapRect ,了解如何执行此操作


归档时间:

查看次数:

4210 次

最近记录:

6 年,8 月 前