• 利用系统APP实现导航---By张秀清


    苹果系统本身自带一个地图APP,但是功能并不是很强大,但是一些简单的导航功能还是能做出来的,下面贴上我的代码

    //
    //  ViewController.m
    //  系统APP导航
    //
    //  Created by 张秀清 on 15/5/4.
    //  Copyright (c) 2015年 张秀清. All rights reserved.
    //
    
    #import "ViewController.h"
    
    #import <MapKit/MapKit.h>
    
    @interface ViewController ()
    /**
     *  输入起点
     */
    @property (nonatomic,strong) UITextField       *startTF;
    /**
     *  输入终点
     */
    @property (nonatomic,strong) UITextField       *endTF;
    /**
     *  开始导航按钮
     */
    @property (nonatomic,strong) UIButton          *navigateButton;
    /**
     *  地理编码器
     */
    @property (nonatomic,strong) CLGeocoder        *geocoder;
    
    @end
    
    @implementation ViewController
    
    #pragma mark - 懒加载
    -(CLGeocoder *)geocoder{
        
        if (!_geocoder) {
            _geocoder = [[CLGeocoder alloc]init];
        }
        return _geocoder;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [self initUI];
    }
    
    #pragma mark - 初始化UI
    -(void)initUI{
        
        _startTF = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, 150, 50)];
        _startTF.borderStyle = UITextBorderStyleRoundedRect;
        _startTF.placeholder = @"begin";
        [self.view addSubview:_startTF];
        
        _endTF = [[UITextField alloc]initWithFrame:CGRectMake(50, 150, 150, 50)];
        _endTF.borderStyle = UITextBorderStyleRoundedRect;
        _endTF.placeholder = @"end";
        [self.view addSubview:_endTF];
        
        _navigateButton = [UIButton buttonWithType:UIButtonTypeSystem];
        _navigateButton.frame = CGRectMake(50, 200, 100, 50);
        [_navigateButton setTitle:@"start" forState:UIControlStateNormal];
        [_navigateButton addTarget:self action:@selector(startNavigation) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:_navigateButton];
    }
    
    #pragma mark - 开始导航
    -(void)startNavigation{
        
        [self.geocoder geocodeAddressString:self.startTF.text completionHandler:^(NSArray *placemarks, NSError *error) {
           
            /**
             *  获取初始位置信息
             */
            if (placemarks.count == 0) {
                return ;
            }
            CLPlacemark *startCLPlacemark = [placemarks lastObject];
            
            [self.geocoder geocodeAddressString:self.endTF.text completionHandler:^(NSArray *placemarks, NSError *error) {
                /**
                 *  获取终点位置信息
                 */
                if (placemarks.count == 0) {
                    return ;
                }
                CLPlacemark *endCLPlacemark = [placemarks lastObject];
                
                //开始导航
                [self navigateWithStartCLPlacemark:startCLPlacemark endCLPlacemark:endCLPlacemark];
            }];
            
        }];
    }
    
    //开始导航
    -(void)navigateWithStartCLPlacemark:(CLPlacemark *)startCLPlacemark endCLPlacemark:(CLPlacemark *)endCLPlacemark{
        
        MKPlacemark *startMKPlacemark = [[MKPlacemark alloc]initWithPlacemark:startCLPlacemark];
        MKPlacemark *endMKPlacemark = [[MKPlacemark alloc]initWithPlacemark:endCLPlacemark];
        
        MKMapItem *startItem = [[MKMapItem alloc]initWithPlacemark:startMKPlacemark];
        MKMapItem *endItem = [[MKMapItem alloc]initWithPlacemark:endMKPlacemark];
        
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        dict[MKLaunchOptionsMapTypeKey] = @(MKMapTypeStandard);//地图模式
        dict[MKLaunchOptionsDirectionsModeKey] = MKLaunchOptionsDirectionsModeDriving;//导航模式(走路/开车)
        
        [MKMapItem openMapsWithItems:@[startItem,endItem] launchOptions:dict];//打开系统地图开始导航
    
    }
    @end
  • 相关阅读:
    如何提高代码质量
    高效代码审查的十个经验
    代码质量管理(一)
    企业级分布式事务
    X/Open DTP——分布式事务模型
    patchca整合Spring MVC生成超炫的验证码
    兄弟,不要这样写服务器代码
    [转]预备知识—程序的内存分配
    [转]MMORPG服务器架构
    myEclipse使用有感
  • 原文地址:https://www.cnblogs.com/sixindev/p/4476502.html
Copyright © 2020-2023  润新知