UI:地图和定位
各种IOS设备可以使用 Core Location 框架确定它的物理位置。core location 主要使用三种技术来实现功能。GPS、蜂窝基站三角网络定位、 wifi 定位服务。这三种技术都会非常的消耗电能,所以在使用Core Location 的时候,要注意,除非必要,要尽量少对你的位置进行轮询。使用 core location 的时候,通过指定所需的最低精度级别,可以减少不必要的电能损耗。
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager startUpdatingLocation];
[self.locationManager requestWhenInUseAuthorization];
self.mapView.mapType = MKMapTypeStandard;
// 2.设置跟踪模式(MKUserTrackingModeFollow == 跟踪)
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
// 3.设置代理(监控地图的相关行为:比如显示的区域发生了改变)
CLLocationCoordinate2D ddd = CLLocationCoordinate2DMake(23, 116);
//
// [self.mapView setCenterCoordinate:ddd];
// 设置跨度
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
{
userLocation.title = @"天朝帝都";
userLocation.subtitle = @"帝都是个牛逼的地方";
#import <MapKit/MapKit.h>
@interface HMAnnotation : NSObject <MKAnnotation>
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
HMAnnotation *anno1 = [[HMAnnotation alloc] init];
anno1.coordinate = CLLocationCoordinate2DMake(39, 119);
anno1.title = @"帝都";
anno1.subtitle = @"帝都帝都帝都帝都帝都";
// 添加一个大头针模型(模型:描述大头针的信息)
[self.mapView addAnnotation:anno1];
HMAnnotation *anno2 = [[HMAnnotation alloc] init];
anno2.coordinate = CLLocationCoordinate2DMake(23, 116);
anno2.title = @"广东";
anno2.subtitle = @"广东广东广东广东广东";
CLLocationDegrees latitude = 23 + arc4random_uniform(20);
CLLocationDegrees longitude = 73.2 + arc4random_uniform(50);
HMAnnotation *anno = [[HMAnnotation alloc] init];
anno.coordinate = CLLocationCoordinate2DMake(latitude, longitude);
[self.mapView addAnnotation:anno];
HMAnnotation *tg1 = [[HMAnnotation alloc] init];
tg1.title = @"xxx大饭店";
tg1.subtitle = @"全场一律15折,会员20折";
tg1.icon = @"category_1";
tg1.coordinate = CLLocationCoordinate2DMake(37, 116);
[self.mapView addAnnotation:tg1];
HMAnnotation *tg2 = [[HMAnnotation alloc] init];
tg2.title = @"xxx影院";
tg2.subtitle = @"最新大片:美国队长2,即将上映。。。";
tg2.icon = @"category_5";
tg2.coordinate = CLLocationCoordinate2DMake(29, 110);
//{
// // 1.先从缓存池中取出可以循环利用的大头针控件
// static NSString *ID = @"anno";
// MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:ID];
//
// // 2.缓存池中没有可以循环利用的大头针控件
// if (annotationView == nil) {
// // 传入循环利用标识来创建大头针控件
// annotationView = [[MKAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:ID];
// // 显示标题和子标题
// annotationView.canShowCallout = YES;
// }
//
// // 3.传递模型(更新大头针数据,覆盖掉之前的旧数据)
// annotationView.annotation = annotation;
//
// // 4.设置图片
// annotationView.image = [UIImage imageNamed:annotation.icon];
//
// return annotationView;
- (IBAction)startNavigation;
@property (nonatomic, strong) MKPlacemark *sourceMKPm;
{
[super viewDidLoad];
self.mapView.delegate = self;
NSString *sourceAddress = @"广州";
NSString *destinationAddress = @"北京";
[self.geocoder geocodeAddressString:sourceAddress completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *gzPm = [placemarks firstObject];
if (gzPm == nil) return;
// 添加广州大头针
HMAnnotation *gzAnno = [[HMAnnotation alloc] init];
gzAnno.coordinate = gzPm.location.coordinate;
gzAnno.title = sourceAddress;
gzAnno.subtitle = gzPm.name;
[self.mapView addAnnotation:gzAnno];
[self.geocoder geocodeAddressString:destinationAddress completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *bjPm = [placemarks firstObject];
if (bjPm == nil) return;
// 添加北京大头针
HMAnnotation *bjAnno = [[HMAnnotation alloc] init];
bjAnno.coordinate = bjPm.location.coordinate;
bjAnno.title = destinationAddress;
bjAnno.subtitle = bjPm.name;
[self.mapView addAnnotation:bjAnno];
[self drawLineWithSourceCLPm:gzPm destinationCLPm:bjPm];
}];
}];
{
if (sourceCLPm == nil || destinationCLPm == nil) return;
// 1.初始化方向请求
// 方向请求
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
// 设置起点
MKPlacemark *sourceMKPm = [[MKPlacemark alloc] initWithPlacemark:sourceCLPm];
request.source = [[MKMapItem alloc] initWithPlacemark:sourceMKPm];
self.sourceMKPm = sourceMKPm;
// 设置终点
MKPlacemark *destinationMKPm = [[MKPlacemark alloc] initWithPlacemark:destinationCLPm];
request.destination = [[MKMapItem alloc] initWithPlacemark:destinationMKPm];
self.destinationMKPm = destinationMKPm;
// 2.根据请求创建方向
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
// 3.执行请求
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
if (error) return;
for (MKRoute *route in response.routes) {
// 添加路线遮盖(传递路线的遮盖模型数据)
[self.mapView addOverlay:route.polyline];
}
}];
// 遮盖 overlay
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
MKPolylineRenderer *redender = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
redender.lineWidth = 5;
redender.strokeColor = [UIColor blueColor];
return redender;
if (self.sourceMKPm == nil || self.destinationMKPm == nil) return;
// 起点
MKMapItem *sourceItem = [[MKMapItem alloc] initWithPlacemark:self.sourceMKPm];
// 终点
MKMapItem *destinationItem = [[MKMapItem alloc] initWithPlacemark:self.destinationMKPm];
// 存放起点和终点
NSArray *items = @[sourceItem, destinationItem];
// 参数
NSMutableDictionary *options = [NSMutableDictionary dictionary];
// 导航模式:驾驶导航
options[MKLaunchOptionsDirectionsModeKey] = MKLaunchOptionsDirectionsModeDriving;
// 是否要显示路况
options[MKLaunchOptionsShowsTrafficKey] = @YES;
// 打开苹果官方的导航应用
[MKMapItem openMapsWithItems:items launchOptions:options];
UI:地图和定位的更多相关文章
- iOS UI进阶-4.0 地图与定位
在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能 ...
- 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)
使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...
- iOS开发系列--地图与定位
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...
- iOS开发之地图与定位
无论是QQ还是微信的移动客户端都少不了定位功能,之前在微信demo中没有添加定位功能,今天就写个定位的小demo来了解一下定位和地图的东西.地图和定位看上去是挺高大上一东西,其实用法比TableVie ...
- [OC][地图] 高德地图之定位初探(一)
使用前的说明 高德地图开放平台的iOS定位模块网址-->http://lbs.amap.com/api/ios-location-sdk/summary/ 高德地图有Web端.android平台 ...
- iOS进阶_地图上定位的标志——大头针
一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...
- 地图、定位 CLLocationManager CLGeocoder CLPlacemark
地图.定位 一.基本知识点 定位: 1.info.plist文件设置 ios8以后,使用定位需要在info.plist文件中添加两个字段NSLocationAlwaysUsageDescription ...
- Android 百度地图API 定位 导航
看看这个利用百度地图定位并实现目的地导航的Demo. 首先看实现效果: 进 入后首先会得到当前位置,在地图上显示出来.在输入框中输入目的地后,就会在地 ...
- ios开发——实用技术OC篇&地图与定位
地图与定位 11.1 iOS定位服务 11.2 iOS地图 11.3 Web地图 1 iOS定位服务 iOS中有三个定位服务组件: Wifi定位,通过查询一个Wifi路由器的地理位置的信息.比较省电, ...
- iOS中的地图和定位
文章摘自http://www.cnblogs.com/kenshincui/p/4125570.html#location 如有侵权,请联系删除. 概览 现在很多社交.电商.团购应用都引入了地图和定 ...
随机推荐
- spark学习(五)总结及其demo
RDD及其特点 1.RDD是Spark的核心数据模型,但是个抽象类,全称为Resillient Distributed Dataset,即弹性分布式数据集. 2.RDD在抽象上来说是一种元素集合,包含 ...
- VC++下编译Libgeotiff(含Libtiff)
转自原文Win10+VC++下编译Libgeotiff(含Libtiff)详细图文教程 GeoTiff是包含地理信息的一种Tiff格式的文件.Libgeotiff就是一个操作GeoTiff文件的库.同 ...
- 数字巨头们的表态--<大佬与大话>
作者魏武挥 类别非虚构 / 中篇 本书为作者为<21世纪商业评论>的专栏文章合集,共20篇,算是第一卷吧,后期还会写下去.这个专栏的名字叫<大佬与大话>,专门收集TMT圈子商业 ...
- [Testing] JavaScript Mocking Fundamentals
Ensure Functions are Called Correctly with JavaScript Mocks Often when writing JavaScript tests and ...
- Java学习之String StringBuffer StringBuilder区别
1.String:对象长度是不可变的,是线程安全. 2.StringBuffer:对象长度是可变的,是线程安全. 3.StringBuilder:对象长度是可变,不是线程安全.
- docker compose环境搭建
概述 Docker Compose提供一个简单的基于YAML配置语言.用于描写叙述和组装多容器的分布式应用. 使用docker定义和执行复杂的应用.使用compose,能够在一个文件中,定义多容器的应 ...
- 算法和流程控制 --《高性能JavaScript》
总结: 1.for, while, do-while循环性能相当,并没有一种循环类型明显快于或满于其他类型. 2.避免使用for-in循环,除非要遍历一个属性数量未知的对象. 3.改善循环性能的最佳形 ...
- 初学c的一点体会
自学C语言的一些体会1 从最初什么都不知道变成知道一点,一转眼就过去了三个多月,最开始只是刚进大学,感觉太闲了不太好就决定学点什么,于是就到图书馆逛了一圈找找看有什么有趣的书可以看看,刚好就在书架上看 ...
- F08标准中Open命令的newunit选项
从gfortran 4.5开始Open命令开始支持newunit选项,示例如下: integer :: u open(newunit=u, file="log.txt", posi ...
- HDU 5188 背包
有N道题.要求得到最少W分 给出N道题的:每道题用时T.分数V,应在且必须在L时刻提交才干得分 问得到W分所用的最少的时间 以L-T排序,然后做01背包就可以 #include "stdio ...