通过使用MapKit可以将地图嵌入到视图中,MapKit框架除了可以显示地图,还支持在地图上做标记。

1,通过mapType属性,可以设置地图的显示类型
MKMapType.Standard :标准地图
MKMapType.Satellite :卫星地图
MKMapType.Hybrid :混合地图
2,地图显示范围的设置
MKCoordinateSpan对象设置地图范围,其中包含两个成员latitudeDelta和longtitudeDelta,这两个类型为CLLocationDegrees(实际就是double类型)。
一般设置为多少纬度,1纬度约等于111千米(69英里)
3,添加标记
使用MKPointAnnotation对象可以在地图上任意位置添加大头针,同时还可以给这个标记添加标题和描述。
4,下面通过样例来演示
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
import UIKit
import MapKit
import CoreLocation
 
class ViewController: UIViewController {
     
    var mainMapView: MKMapView!
     
    //定位管理器
    let locationManager:CLLocationManager = CLLocationManager()
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //使用代码创建
        self.mainMapView = MKMapView(frame:self.view.frame)
        self.view.addSubview(self.mainMapView)
         
        //地图类型设置 - 标准地图
        self.mainMapView.mapType = MKMapType.Standard
         
        //创建一个MKCoordinateSpan对象,设置地图的范围(越小越精确)
        var latDelta = 0.05
        var longDelta = 0.05
        var currentLocationSpan:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
         
        //定义地图区域和中心坐标(
        //使用当前位置
        //var center:CLLocation = locationManager.location.coordinate
        //使用自定义位置
        var center:CLLocation = CLLocation(latitude: 32.029171, longitude: 118.788231)
        var currentRegion:MKCoordinateRegion = MKCoordinateRegion(center: center.coordinate,
            span: currentLocationSpan)
         
        //设置显示区域
        self.mainMapView.setRegion(currentRegion, animated: true)
         
        //创建一个大头针对象
        var objectAnnotation = MKPointAnnotation()
        //设置大头针的显示位置
        objectAnnotation.coordinate = CLLocation(latitude: 32.029171, longitude: 118.788231).coordinate
        //设置点击大头针之后显示的标题
        objectAnnotation.title = "南京夫子庙"
        //设置点击大头针之后显示的描述
        objectAnnotation.subtitle = "南京市秦淮区秦淮河北岸中华路"
        //添加大头针
        self.mainMapView.addAnnotation(objectAnnotation)
    }
}

5,标记样式的修改
默认标记是一个红色的大头针。通过MKMapViewDelegate代理,我们可以自定义大头针的样式,以及点击注释视图右侧按钮样式等。

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
import UIKit
import MapKit
import CoreLocation
 
class ViewController: UIViewController, MKMapViewDelegate {
     
    var mainMapView: MKMapView!
         
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //使用代码创建
        self.mainMapView = MKMapView(frame:self.view.frame)
        self.view.addSubview(self.mainMapView)  
         
        self.mainMapView.delegate = self
    }
     
    //自定义大头针样式
    func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!)
        -> MKAnnotationView! {
        if annotation is MKUserLocation {
            return nil
        }
         
        let reuserId = "pin"
        var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuserId)
            as? MKPinAnnotationView
        if pinView == nil {
            //创建一个大头针视图
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuserId)
            pinView?.canShowCallout = true
            pinView?.animatesDrop = true
            //设置大头针颜色
            pinView?.pinColor = MKPinAnnotationColor.Green
            //设置大头针点击注释视图的右侧按钮样式
            pinView?.rightCalloutAccessoryView = UIButton.buttonWithType(UIButtonType.DetailDisclosure)
                as! UIButton
        }else{
            pinView?.annotation = annotation
        }
         
        return pinView
    }
}

6,地图代理 - MKMapViewDelegate中所有代理方法
MKMapViewDelegate除了可以设置大头针样式,注释视图点击响应等。还可以在地图相关事件发生时(比如缩放,地图加载,位置跟踪等),触发相应的方法。

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import UIKit
import MapKit
import CoreLocation
 
class ViewController: UIViewController, MKMapViewDelegate {
     
    var mainMapView: MKMapView!
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //使用代码创建
        self.mainMapView = MKMapView(frame:self.view.frame)
        self.view.addSubview(self.mainMapView)
               
        self.mainMapView.delegate = self
    }
      
    func mapView(mapView: MKMapView!, regionWillChangeAnimated animated: Bool) {
        println("地图缩放级别发送改变时")
    }
     
    func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool) {
        println("地图缩放完毕触法")
    }
     
    func mapViewWillStartLoadingMap(mapView: MKMapView!) {
        println("开始加载地图")
    }
     
    func mapViewDidFinishLoadingMap(mapView: MKMapView!) {
        println("地图加载结束")
    }
     
    func mapViewDidFailLoadingMap(mapView: MKMapView!, withError error: NSError!) {
        println("地图加载失败")
    }
     
    func mapViewWillStartRenderingMap(mapView: MKMapView!) {
        println("开始渲染下载的地图块")
    }
     
    func mapViewDidFinishRenderingMap(mapView: MKMapView!, fullyRendered: Bool) {
        println("渲染下载的地图结束时调用")
    }
     
    func mapViewWillStartLocatingUser(mapView: MKMapView!) {
        println("正在跟踪用户的位置")
    }
     
    func mapViewDidStopLocatingUser(mapView: MKMapView!) {
        println("停止跟踪用户的位置")
    }
     
    func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) {
        println("更新用户的位置")
    }
     
    func mapView(mapView: MKMapView!, didFailToLocateUserWithError error: NSError!) {
        println("跟踪用户的位置失败")
    }
     
    func mapView(mapView: MKMapView!, didChangeUserTrackingMode mode: MKUserTrackingMode,
        animated: Bool) {
        println("改变UserTrackingMode")
    }
     
    func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
        println("设置overlay的渲染")
        return nil
    }
     
    func mapView(mapView: MKMapView!, didAddOverlayRenderers renderers: [AnyObject]!) {
        println("地图上加了overlayRenderers后调用")
    }
     
    /*** 下面是大头针标注相关 *****/
    func mapView(mapView: MKMapView!, didAddAnnotationViews views: [AnyObject]!) {
        println("添加注释视图")
    }
     
    func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!,
        calloutAccessoryControlTapped control: UIControl!) {
        println("点击注释视图按钮")
    }
     
    func mapView(mapView: MKMapView!, didSelectAnnotationView view: MKAnnotationView!) {
        println("点击大头针注释视图")
    }
     
    func mapView(mapView: MKMapView!, didDeselectAnnotationView view: MKAnnotationView!) {
        println("取消点击大头针注释视图")
    }
     
    func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!,
        didChangeDragState newState: MKAnnotationViewDragState,
        fromOldState oldState: MKAnnotationViewDragState) {
        println("移动annotation位置时调用")
    }
}

Swift - 使用MapKit显示地图,并在地图上做标记的更多相关文章

  1. 百度地图api根据地图缩放等级显示不同的marker点,功能二

    功能一里面有marker点后台的代码 根据地图的缩放等级显示不同marker点的坐标JSP代码 <%@ page language="java" contentType=&q ...

  2. 创建一个ArcGIS for Android 新项目并显示出本地的地图

    1.准备工作:首先要配置好android的开发环境,然后在Eclipse中安装ArcGIS for Android的开发控件:在ArcCatalog中发布好本地的地图服务. 2.安装完ArcGIS f ...

  3. 如何在WindowsPhone Bing Map控件中显示必应中国中文地图、谷歌中国中文地图。

    原文:如何在WindowsPhone Bing Map控件中显示必应中国中文地图.谷歌中国中文地图. 最近正好有点业余时间,所以在做做各种地图.Bing Map控件本身就能显示必应地图,但是很遗憾微软 ...

  4. 从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理

    从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理 作者:naaoveGI…    文章来源:naaoveGIS    点击数:1145    更新时间: ...

  5. ios 一步一步学会自定义地图吹出框(CalloutView)-->(百度地图,高德地图,google地图)

    前言 在 ios上边使用地图库的同学肯定遇到过这样的问题:吹出框只能设置title和subtitle和左右的view,不管是百度地图还是高德地图还是自带的 google地图,只提供了这四个属性,如果想 ...

  6. Android地图开发之地图的选择

    做lbs开发差不多快2年了,地图相关的产品也差不多做了3个了,用到过的地图包括google地图.高德地图.百度地图.图吧.Osmdroid,今天总结下,方便大家开发时选择合适的地图. 首先说定位模块选 ...

  7. js调用百度地图API创建地图,搜索位置

    实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <met ...

  8. 关于百度地图API的地图坐标转换问题

    原文:关于百度地图API的地图坐标转换问题 我在之前的文章利用html5获取经纬度并且在百度地图中显示位置中使用了百度地图的API来显示html5获取的地理位置,在文中我说过这样的话,我说百度地图的准 ...

  9. 网页嵌入百度地图和使用百度地图api自定义地图的详细步骤

    在网页中插入百度地图 如果想在自己的网页上面加入百度地图的话,可以用百度地图的api.具体使用方法如下: 第一步:进入百度创建地图的网站http://api.map.baidu.com/lbsapi/ ...

随机推荐

  1. elk 索引

    zjtest7-redis:/usr/local/logstash-2.3.4/config# cat logstash_agent.conf input { file { type => &q ...

  2. UVALive 5102 Fermat Point in Quadrangle 极角排序+找距离二维坐标4个点近期的点

    题目链接:点击打开链接 题意: 给定二维坐标上的4个点 问: 找一个点使得这个点距离4个点的距离和最小 输出距离和. 思路: 若4个点不是凸4边形.则一定是端点最优. 否则就是2条对角线的交点最优,能 ...

  3. 菜鸟系列之C/C++经典试题(七)

    找含单链表的环入口点 :怎样推断单链表中是否存在环(即下图中从结点E到结点R组成的环)? ,则在low进入环后继续绕环遍历一周之前fast必定能与low重合(且必定是第一次重合).于是函数可写例如以下 ...

  4. 【Hibernate】双向多对多Set查询

    一个计划对于多个竞价,一个竞价对应多个计划. 1.实体 /** * @author Tidy * @Description 计划 */ public class EbgStockPlanContent ...

  5. BestCoder Round #50 (div.1) 1002 Run (HDU OJ 5365) 暴力枚举+正多边形判定

    题目:Click here 题意:给你n个点,有多少个正多边形(3,4,5,6). 分析:整点是不能构成正五边形和正三边形和正六边形的,所以只需暴力枚举四个点判断是否是正四边形即可. #include ...

  6. 配置greenplum参数

    在进行一个greenplum安装之前需要进行配置一下相关的系统参数,否则很容易出现意想不到的错误. 1.修改系统参数 编辑 /etc/sysctl.conf ,以下是最小配置 kernel.shmma ...

  7. BZOJ 3132: 上帝造题的七分钟( 二维BIT )

    二维树状数组... 自己YY一下再推一下应该可以搞出来... --------------------------------------------------------------------- ...

  8. 【第一篇:C++与opencv】图片的读取和显示

    这里介绍C++版本的opencv,和C语言版本有些不同,先看代码^_^ [编译环境:opencv2.4.4和VS2008] #include "stdafx.h" #include ...

  9. portal---easyui

    一,效果图. 二,源代码. <!doctype html><html><head> <meta http-equiv="Content-Type&q ...

  10. java--偏向锁

    Java偏向锁(Biased Locking)是Java 6引入的一项多线程优化.它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能. 轻量级锁也是一种多线程优化,它与偏向锁的区别在于, ...