前奏. 知识点介绍

一. 导航和画线

  1. 地图画线 (理解)

二. 百度地图

  1. 集成百度地图 (掌握)
  2. POI检索 (掌握)

三. 社交分享

  1. 系统自带分享 (了解)
  2. 友盟分享 (掌握)
  3. SSO授权 (理解)

一. 导航和画线

1. 地图画线 (理解)

要进行画线—-> 需要获取起始点及终点位置—-> 创建方向对象计算路线—->获取路线添加到地图上—-> 设置渲染对象

注意: 实现画线, 需要请求用户授权. 画线时需要获取用户的当前位置, 此时, 就必须在当前程序中请求授权.

  • 创建地理编码并执行编码方法
  • 获取CLPlacemark地标对象
  • 根据CLPlacemark创建MKPlacemark
  • 根据MKPlacemark获取终点MKMapItem
  • 调用MKMapItem的mapItemForCurrentLocation方法获取起点MKmapItem
  • 创建方向请求对象, 并设置起点和中点属性
  • 创建方向对象, 发送计算方向的方法
  • 在计算方向的block中获取路线对象MKRoute
/**
1. 需要请求授权
2. 创建一个方向请求对象来计算路线, 并获取路线轨迹, 添加到地图上
3. 将路线轨迹渲染到地图上
*/
- (void)routeWithSourceItem:(MKMapItem *)sourceItem destinationItem:(MKMapItem *)destinationItem
{
//1. 创建方向请求对象 --> 拼接请求参数
MKDirectionsRequest *request = [MKDirectionsRequest new];
request.source = sourceItem;
request.destination = destinationItem; //2. 创建一个方向对象 --> 创建一个完整的请求URL
MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; //3. 计算路线 --> 发送请求
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error) { //3.1 防错处理
if (error || response.routes.count == ) {
NSLog(@"出错");
return ;
} //3.2 获取路线信息 --> 取一个
MKRoute *route = response.routes.firstObject; //polyline: 折线 --> 也就是实际的路线轨迹
//Overlay: 遮盖物
[self.mapView addOverlay:route.polyline];
}];
} //只要地图添加了addOverlay了, 就会来到此方法, 设置渲染
//MKOverlay:遮盖物 Renderer:渲染
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
//1. 创建折线渲染物对象
MKPolylineRenderer *polyline = [[MKPolylineRenderer alloc] initWithOverlay:overlay]; //2. 设置颜色 --> 必须的
polyline.strokeColor = [UIColor blueColor];
polyline.lineWidth = ; //3. 返回此对象
return polyline;
}

二. 百度地图

1. 集成百度地图 (掌握)

  • 注册百度开发者: http://lbsyun.baidu.com/index.php?title=iossdk
  • 注册应用, 获取key
  • 按照文档的开发指南集成即可(如果文档有错, 或者描述不清, 需要看官方Demo), 建议顺序: 配置开发环境 —> Hello BaiduMap —> 注意事项

#pragma mark 1. 集成百度地图 (掌握)

一. 为什么更多的开发者使用第三方SDK?

1. 第三方SDK有文档, 有Demo, 使用方便

2. 为了统一各个平台的经纬度问题(火星坐标)

二. SDK的使用流程

1. 第三方SDK(开发组件包, 需要注册才能使用 --> 需要创建应用 --> 需要获取授权码 --> Appdelete中注册 ) > 第三方类库(AFN/SDWebImage)

2. 集成文档的查看顺序 仔细看文档就可以实现.

3. 按照需要的功能, 拷贝对应的代码, 修改细节即可

三. 集成百度地图的流程

1. 注册开发者, 注册应用程序 --> Key

2. 开发指南 --> 配置开发环境 --> Hello BaiduMap --> 注意事项

3. 按照需要的功能找对应的文档代码,如果文档有问题,可以参考Demo

2. POI检索 (掌握)

  • POI: 中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
  • POI检索流程: 先创建始检索对象, 然后设置检索参数, 在代理中接收数据自行处理
- (void)poiSearch
{
//初始化检索对象
_searcher =[[BMKPoiSearch alloc]init];
_searcher.delegate = self; //发起检索 --> 拼接参数
BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init]; ///分页索引,可选,默认为0
option.pageIndex = ; ///分页数量,可选,默认为10,最多为50
option.pageCapacity = ; option.location = CLLocationCoordinate2DMake(39.915, 116.404); option.keyword = @"小吃"; //这里相当于在发送网络请求 用search对象拼接了otion的参数
BOOL flag = [_searcher poiSearchNearBy:option]; if(flag)
{
NSLog(@"周边检索发送成功");
}
else
{
NSLog(@"周边检索发送失败");
}
} //实现PoiSearchDeleage处理回调结果
- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error
{
if (error == BMK_SEARCH_NO_ERROR) {
//在此处理正常结果
//1. 直接显示大头针
//2. 显示TableView //从poi结果数组中获取
for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) { // 添加一个PointAnnotation
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
annotation.coordinate = poiInfo.pt;
annotation.title = poiInfo.name;
[_mapView addAnnotation:annotation];
} }
else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){
//当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
// result.cityList;
NSLog(@"起始点有歧义");
} else {
NSLog(@"抱歉,未找到结果");
}
}

三. 社交分享

1. 系统自带分享 (了解)

  • 导入系统Social框架, 然后创建并弹出
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//1. 判断分享的类型是否可用
if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) {
NSLog(@"请到设置中添加新浪微博账号, 然后在分享");
return;
} //2. 创建分享控制器
SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; //2.1 文字
[composeVC setInitialText:@"拉斯维加斯之夜, 一不小心输了2个亿, 就是为了图个开心"]; //2.2 图像
[composeVC addImage:[UIImage imageNamed:@""]]; //2.3 网址
[composeVC addURL:[NSURL URLWithString:@"http://www.itcast.cn"]]; //3. 模态弹出
[self presentViewController:composeVC animated:nil completion:nil];
}

2. 友盟分享 (掌握)

  • 注册开发者:http://www.umeng.com
  • 选择U-Share模块, 创建应用, 获取key(不需要和Bundle ID匹配),
  • 看文档集成

3. SSO授权 (理解)

SSO授权: 单点登录. 获取授权时(譬如微博), 如果手机已经安装对应的客户端(譬如微博客户端), 则可通过对应的官方客户端快速完成OAuth2.0授权。

  • SSO授权与OAuth授权, 流程对比:
    • 1> OAuth在当前APP里就可以完成, 只需要一个网页为载体, 需要用户手动输入账号密码, 然后发送请求进行授权
    • 2> SSO前提是安装了第三方的客户端(如QQ,微信,微博), 授权过程在第三方客户端中完成, 如果第三方的客户端已经是登陆状态, 就只需一键授权
  • SSO优点:
    • 1> 节省用户输入的时间(账号密码太长导致输入过慢, 键盘太小导致输入有误)
    • 2> 保护用户的隐私
    • 3> 减少用户在任何环节的流失率

IOS_OC_百度地图与社交分享的更多相关文章

  1. C#调用百度地图API经验分享(一)

    最近客户提了一个需求,要在网站中添加百度地图的显示,其实原来是有谷歌地图的,但由于谷歌在大陆遭到封杀,只好再给用户增加一个选择了. 下面我将自己最近整理的一些知识分享给大家. 如何使用百度地图API: ...

  2. 百度地图整合功能分享修正版[ZMap.js] 实例源码!

    ZMap 功能说明 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是 ...

  3. C#调用百度地图API经验分享(四)

    这一篇,记录一下我调用的地图API实现的功能.下面介绍的都是一些片段的节选,不能直接复制就运行.在实现之前肯定要加载地图,先放一个webbroser控件,然后如下: private void Form ...

  4. C#调用百度地图API经验分享(三)

    这一篇我将跟大家分享一下我自己在开发过程中总结出的一些操作地图的方法,属性,及思路,希望可以让大家少走弯路. 1.定位 一般百度的示例DEMO里开始初始化地图时用的都是map.centerAndZoo ...

  5. C#调用百度地图API经验分享(二)

    接着上一篇,将上一篇代码的js提取出来:<script type="text/JavaScript">var map = new BMap.Map("allm ...

  6. 百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例 [源码下载]

    相关说明 1. 界面查看: 吐槽贴:百度地图 api 封装 的实用功能 [源码下载] 2. 功能说明: 百度地图整合功能分享修正版[ZMap.js] 实例源码! ZMap.js 本类方法功能大多使用 ...

  7. 百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例

    百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例 相关说明 1. 界面查看: 吐槽贴:百度地图 api 封装 的实用功能 [源码下载] 2. 功能说明: 百度地图整合功能分享修 ...

  8. [百度地图] 用于类似 DWZ UI 框架的 百度地图 功能封装类 [MultiZMap.js] 实例源码

    MultiZMap 功能说明 MultiZMap.js 本类方法功能大多使用 prototype 原型 实现,它是 ZMap 的多加载版本,主要用于类似 DWZ 这个 多标签的 UI 的框架: 包含的 ...

  9. Android百度地图相关内容汇总

    Android百度地图知识讲解 1.百度地图开发环境搭建    http://www.apkbus.com/android-116050-1-1.html 2.Android百度地图系列教程    h ...

随机推荐

  1. Javascript的简介和使用

    摘要:先讨论JavaScript的由来和一些比较容易混淆的概念,又讨论了JavaScript的实现,紧接着说明了在网页中怎么有效地更好地引入js代码. JavaScript的由来 是从一个简单的输入验 ...

  2. Linux下platform设备以及platform设备和驱动注册的先后顺序

    platform是Linux系统提供的一种管理设备的手段,所有SOC系统中集成的独立的外设控制器.挂接在SOC内存空间的外设等都属Platform设备.如ARM S3C6410处理器中,把内部集成的I ...

  3. POJ2891 - Strange Way to Express Integers(模线性方程组)

    题目大意 求最小整数x,满足x≡a[i](mod m[i])(没有保证所有m[i]两两互质) 题解 中国剩余定理显然不行....只能用方程组两两合并的方法求出最终的解,刘汝佳黑书P230有讲~~具体证 ...

  4. codeforces 432D Prefixes and Suffixes

    由于包含了前缀与后缀,很容易想到用KMP去算前缀与后缀的公共缀.另外要计算某个后缀在整个串中出现的次数,由于后缀自动机是比较容易求的,然后就直接上后缀自动机了.先分别用KMP算法与后缀自动机跑一遍,然 ...

  5. ssl error rx record too long

  6. java枚举enum

    http://www.cnblogs.com/wenruo/p/5349614.html java的枚举通过关键字enum实现.可以理解为一个类,不过这个类由编译器自动加了一些方法. static v ...

  7. hdoj 3549 Flow Problem【网络流最大流入门】

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. 关于sqlite数据库

    firedac数据引擎可以支持sqlite数据库,这种方式是纯绿色的,发布时不需要带上官方的sqlite.dll动态链接库文件. 当然调用该动态链接库的API方法也是可以操作sqlite数据库的,这样 ...

  9. fckeditor的用法

    1.下载解压文件 2.将解压后的文件放入webroot下 3.将js引入要使用fckeditor的页面 4.用ckeditor替换textarea <@e.textarea id="t ...

  10. Supervisor的安装与使用入门

    Supervisor是一个进程管理工具,官方的说法 自己开发的应用往往也希望做到随系统自动启动, 而且启动之后最好还能方便的控制其停止/重启. 传统的做法是在 /etc/init.d/ 下建立启动脚本 ...