Swift - 使用MapKit显示地图,并在地图上做标记

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显示地图,并在地图上做标记的更多相关文章
- 百度地图api根据地图缩放等级显示不同的marker点,功能二
功能一里面有marker点后台的代码 根据地图的缩放等级显示不同marker点的坐标JSP代码 <%@ page language="java" contentType=&q ...
- 创建一个ArcGIS for Android 新项目并显示出本地的地图
1.准备工作:首先要配置好android的开发环境,然后在Eclipse中安装ArcGIS for Android的开发控件:在ArcCatalog中发布好本地的地图服务. 2.安装完ArcGIS f ...
- 如何在WindowsPhone Bing Map控件中显示必应中国中文地图、谷歌中国中文地图。
原文:如何在WindowsPhone Bing Map控件中显示必应中国中文地图.谷歌中国中文地图. 最近正好有点业余时间,所以在做做各种地图.Bing Map控件本身就能显示必应地图,但是很遗憾微软 ...
- 从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理
从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理 作者:naaoveGI… 文章来源:naaoveGIS 点击数:1145 更新时间: ...
- ios 一步一步学会自定义地图吹出框(CalloutView)-->(百度地图,高德地图,google地图)
前言 在 ios上边使用地图库的同学肯定遇到过这样的问题:吹出框只能设置title和subtitle和左右的view,不管是百度地图还是高德地图还是自带的 google地图,只提供了这四个属性,如果想 ...
- Android地图开发之地图的选择
做lbs开发差不多快2年了,地图相关的产品也差不多做了3个了,用到过的地图包括google地图.高德地图.百度地图.图吧.Osmdroid,今天总结下,方便大家开发时选择合适的地图. 首先说定位模块选 ...
- js调用百度地图API创建地图,搜索位置
实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <met ...
- 关于百度地图API的地图坐标转换问题
原文:关于百度地图API的地图坐标转换问题 我在之前的文章利用html5获取经纬度并且在百度地图中显示位置中使用了百度地图的API来显示html5获取的地理位置,在文中我说过这样的话,我说百度地图的准 ...
- 网页嵌入百度地图和使用百度地图api自定义地图的详细步骤
在网页中插入百度地图 如果想在自己的网页上面加入百度地图的话,可以用百度地图的api.具体使用方法如下: 第一步:进入百度创建地图的网站http://api.map.baidu.com/lbsapi/ ...
随机推荐
- haproxy 访问www.zjdev.com 自动跳转到appserver_8001 对应的nginx
# # acl zjdev_7_req hdr_beg(host) -i www.zjdev.com # use_backend appserver_8001 if zjdev_7_req
- BZOJ 网站镜像
网站镜像大小:15Mb 镜像保存时间:2012年2月[有绝大多数题目] 镜像下载地址:http://download.csdn.net/detail/wnjxyk/7913125
- 解惑:NFC手机怎样轻松读取银行卡信息?
自支付宝钱包8.0推出了NFC新功能,仅仅要将支持NFC功能的手机靠近公交卡.银行卡等带有芯片的IC卡上,可迅速读取卡内剩余金额.卡的信息,还能够给卡进行充值,很贴心有用. 可是非常多网友表示担忧,要 ...
- ActionBar点击弹出下拉框操作
首先: getActionBar().setDisplayShowTitleEnabled(false); ActionBar.LayoutParams lp = new ActionBar.Layo ...
- BZOJ-1007-水平可见直线-HN2008
描写叙述 在xoy直角坐标平面上有n条直线L1,L2,-Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 比如,对于直线: L1:y=x; L2:y=- ...
- 【Oracle】nvl与nvl2对比
1.nvl(v1,v2),只要v1为null,即将值变为v2. pay(类型):number; 在执行 nvl(pay_type,'null') 函数的时候会提示无效数字,可能是nvl函数会自动将其转 ...
- Win10玩魔兽争霸不能全屏显示的设置教程
Win10玩魔兽争霸不能全屏显示的设置教程: 1.右击桌面左下角的windows图标,显示图片内容,然后点击运行: 2.点击运行,有个输入框,输入regedit,点击确认: 3.显示win10注册表, ...
- hdu1284经典钱币兑换问题
钱币兑换问题. 题目 http://acm.hdu.edu.cn/showproblem.php?pid=1284 完全背包. 这种是求背包问题最多的组合方案 参考了一些资料 http://blo ...
- Linux下查看二进制文件命令
一.在Linux下查看二进制文件的软件: xxd hexdump 二.编辑: 1.biew 2.hexedit 3.vim Vim 来编辑二进制文件.Vim 本非为此而设计的,因而有若干局限.但你能读 ...
- JAVA学习中好网站 - -
http://www.54bk.com 我是博客 http://www.java-cn.com java中文网 http://java.sun.com sun官方网站 http://www.comej ...