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.
如果您需要快速从 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 次 |
| 最近记录: |