IOS_OC_百度地图与社交分享

前奏. 知识点介绍php

一. 导航和画线ios

  1. 地图画线 (理解)

二. 百度地图数组

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

三. 社交分享微信

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

 

一. 导航和画线网络

1. 地图画线 (理解)框架

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

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

  • 建立地理编码并执行编码方法
  • 获取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 == 0) {
            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 = 5;
    
    //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 = 0;
    
    ///分页数量,可选,默认为10,最多为50
    option.pageCapacity = 10;
    
    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:@"1"]];
    
    //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> 减小用户在任何环节的流失率
相关文章
相关标签/搜索