Swift - 获取、设置MKMapView的地图缩放级别(zoomlevel)

    使用  MapKit 框架提供的  MKMapView,我们可以很方便地在应用中显示地图。 MKMapView 使用也十分简单,只需设置好显示区域(中心点坐标,以及范围),地图就会自动缩放到合适的级别并显示。具体用法可以参考我之前写的这篇文章: Swift - 使用MapKit显示地图,并在地图上做标记

    但有时我们想要得到地图当前的缩放级别( ZoomLevel)、或者想直接设置地图的缩放级别, MKMapView 原生是不提供这个接口的。下面演示如何通过对  MKMapView 进行扩展来实现该功能。

1,扩展 MKMapView

(1)这里给  MKMapView 增加了个  zoomLevel 属性及相关方法。通过该属性可以获取或设置地图当前的缩放级别。具体实现方式如下:
  • 获取 zoomLevel:由于 MKMapView 里地图的缩放级别是根据显示区域自动计算的,我们同样可以通过显示区域反算出对应的缩放级别。
  • 设置 zoomLevel:同样地,我们可以通过缩放级别计算出对应的显示区域,并对 MKMapView 进行设置。
(2)缩放级别范围是: 2 -  20(其中  2 为世界地图)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import  MapKit
 
extension  MKMapView  {
     //缩放级别
     var  zoomLevel:  Int  {
         //获取缩放级别
         get  {
             return  Int (log2(360 * ( Double ( self .frame.size.width/256)
                 self .region.span.longitudeDelta)) + 1)
         }
         //设置缩放级别
         set  (newZoomLevel){
             setCenterCoordinate(coordinate:  self .centerCoordinate, zoomLevel: newZoomLevel,
                                 animated:  false )
         }
     }
     
     //设置缩放级别时调用
     private  func  setCenterCoordinate(coordinate:  CLLocationCoordinate2D , zoomLevel:  Int ,
                                      animated:  Bool ){
         let  span =  MKCoordinateSpanMake (0,
                     360 / pow(2,  Double (zoomLevel)) *  Double ( self .frame.size.width) / 256)
         setRegion( MKCoordinateRegionMake (centerCoordinate, span), animated: animated)
     }
}

2,使用样例

(1)效果图
  • 缩放地图时,上方的文本标签以及 slider 会显示出当前对应的缩放级别。
  • 而拖动 slider 滑块,MKMapView 也会自动显示对应缩放级别的地图。
     原文:Swift - 获取、设置MKMapView的地图缩放级别(zoomlevel)      原文:Swift - 获取、设置MKMapView的地图缩放级别(zoomlevel)      原文:Swift - 获取、设置MKMapView的地图缩放级别(zoomlevel)

(2)样例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import  UIKit
import  MapKit
import  CoreLocation
 
class  ViewController UIViewController MKMapViewDelegate  {
     
     //显示当前缩放级别的文本标签
     @IBOutlet  weak  var  label:  UILabel !
     
     //设置缩放级别的滑块
     @IBOutlet  weak  var  slider:  UISlider !
     
     //显示地图的MKMapView
     @IBOutlet  weak  var  mapView:  MKMapView !
 
     //定位管理器
     let  locationManager: CLLocationManager  CLLocationManager ()
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
         
         //设置代理
         self .mapView.delegate =  self
         
         //地图类型设置 - 标准地图
         self .mapView.mapType =  MKMapType .standard
         
         //创建一个MKCoordinateSpan对象,设置地图的范围(越小越精确)
         let  latDelta = 0.05
         let  longDelta = 0.05
         let  currentLocationSpan: MKCoordinateSpan  MKCoordinateSpanMake (latDelta, longDelta)
         
         //定义地图区域和中心坐标
         let  center: CLLocation  CLLocation (latitude: 32.029171, longitude: 118.788231)
         let  currentRegion: MKCoordinateRegion  MKCoordinateRegion (center: center.coordinate,
                                                                   span: currentLocationSpan)
         //设置显示区域
         self .mapView.setRegion(currentRegion, animated:  true )
     }
     
     //mapView显示区域改变时调用
     func  mapView(_ mapView:  MKMapView , regionDidChangeAnimated animated:  Bool ) {
         label.text =  "当前缩放级别:\(mapView.zoomLevel)"
         slider.value =  Float (mapView.zoomLevel)
     }
     
     //滑块值改变时调用
     @IBAction  func  sliderDidchange(_ sender:  Any ) {
         //将mapView设置成对应的缩放级别
         mapView.zoomLevel =  Int (slider.value)
     }
}

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1878.html
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值