前奏. 知识点介绍

一. 导航和画线

  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. libcurl断点下载

    开发需要写了一个处理curl 下载的c++类,内含有多个静态方法和实例方法,写在这里留给有需求的同学 头文件 CURLHelper.h enum CURLHelperStateType { CURLH ...

  2. 五指cms标签说明汇总

    1.栏目列表标签 只有一级导航: {wz:content action="category" cid="0" pagesize="100" ...

  3. 微软Azure 存储管理器的简单介绍

    Windows Azure存储用户经常希望能够在“管理器”中查看他们的数据,管理器指的是一款可用于显示存储帐户数据的工具.我们之前提供了我们所知的存储管理器列表.在本文中,我们将对此列表进行更新,使其 ...

  4. linux中cron用法

    http://blog.chinaunix.net/uid-677314-id-83387.html

  5. Spark0.8.0的安装配置

    1.profile export SCALA_HOME=/home/hadoop/scala-2.9.3SPARK_080=/home/hadoop/spark-0.8.0export SPARK_H ...

  6. Storm系列(十九)普通事务ITransactionalSpout及示例

    普通事务API详解 1   _curtxid:" + _curtxid 46                      + ",_tx.getTransactionId():&qu ...

  7. 树形遍历(java)---孩子双亲表示法

    给定一个树形结构,如图: 将它转换为孩子双亲表示法: 以下是JAVA实现://先序遍历 import java.util.ArrayList; public class TreeTraverse{ s ...

  8. Shell脚本编程总结及速查手册

    Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系. ...

  9. iOS Xcode的快捷键

    将一些搜集和经常使用的快捷键记录下来,方便你我. Command +1~ 8: 跳转到导航区的不同位置 Command +0 :显示/隐藏导航区 Command Alt 1~ 6:在不同检测器之间跳转 ...

  10. SilkTest天龙八部系列1-初始化和构造函数

    SilkTest没有提供专门的构造函数机制,但是在类对象生成的过程中,会先初始化在类中申明的变量.我们可以在初始化该变量的时, 调用某些函数完成对象初始化工作,看上去好像是调用了构造函数一样.不过要记 ...