前奏. 知识点介绍
一. 导航和画线
- 地图画线 (理解)
二. 百度地图
- 集成百度地图 (掌握)
- POI检索 (掌握)
三. 社交分享
- 系统自带分享 (了解)
- 友盟分享 (掌握)
- 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> 减少用户在任何环节的流失率