mkmapView的应用

转载 2016年06月02日 10:04:44
#import "ViewController.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<MKMapViewDelegate,CLLocationManagerDelegate,UISearchBarDelegate>
{
    MKPointAnnotation *pint;
    CLGeocoder *clg;
}

@property(nonatomic,strong)MKMapView *mapView;
@property(nonatomic,strong)CLLocationManager *clloca;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    
    //初始化对象
    self.mapView=[[MKMapView alloc] initWithFrame:CGRectMake(0, 68, self.view.frame.size.width, self.view.frame.size.height)];
    
    clg=[[CLGeocoder alloc] init];
    //标准地图
    self.mapView.mapType=MKMapTypeStandard;
    //当前位置标点类型
    [self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];
    //是否显示当前位置
    self.mapView.showsUserLocation=YES;
    
    self.mapView.scrollEnabled=YES;
    self.mapView.delegate=self;
    
    //缩放
    self.mapView.zoomEnabled=YES;
    self.mapView.showsScale=YES;
    
    [self.view addSubview:self.mapView];
    
    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"定位服务不可用!");
        
        return;
    }else{
        
        self.clloca=[[CLLocationManager alloc] init];
        //设置代理
        [self.clloca setDelegate:self];
        //设置精准度
        [self.clloca setDesiredAccuracy:kCLLocationAccuracyBest];
        
        //是否获取授权
        [self.clloca startUpdatingLocation];
        //调取
        [self.clloca requestAlwaysAuthorization];
    }
    
    self.mapView.userInteractionEnabled=YES;
    UILongPressGestureRecognizer *press=[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(pre:)];
    
    press.minimumPressDuration=0.3;
    [self.mapView addGestureRecognizer:press];
    
    [self addsear];
}

-(void)addsear{
    
    UISearchBar *search=[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 150, 40)];
    search.showsCancelButton=YES;
    search.showsSearchResultsButton=YES;
    search.delegate=self;
    self.navigationItem.titleView=search;
}

-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    
    [clg geocodeAddressString:searchBar.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        if (placemarks.count>0) {
            
            CLPlacemark *place=placemarks[0];
            CLLocation *location=place.location;
            CLLocationCoordinate2D coor=location.coordinate;
            MKCoordinateSpan span;
            span.latitudeDelta=0.01;
            span.longitudeDelta=0.01;
            MKCoordinateRegion region={coor,span};
            [self.mapView setRegion:region animated:YES];
        }
    }];
    searchBar.text=nil;
}


-(void)pre:(UILongPressGestureRecognizer *)sender{
    
    CGPoint point=[sender locationInView:self.mapView];
    CLLocationCoordinate2D coord=[self.mapView convertPoint:point toCoordinateFromView:self.mapView];
    
    CLLocation *location=[[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude];
    
  //方向解析
    [clg reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        CLPlacemark *placem=[placemarks objectAtIndex:0];
        
        NSArray *arry=[placem.addressDictionary objectForKey:@"FormattedAddressLines"];
        NSMutableString *str=[[NSMutableString alloc] init];
        
        for (int i=0; i<arry.count; i++) {
            [str appendString:arry[i]];
        }
        
        [self.mapView removeAnnotation:pint];
        pint=[[MKPointAnnotation alloc] init];
        pint.coordinate=coord;
        pint.title=@"放上大头针";
        pint.subtitle=[NSString stringWithFormat:@"%@",str];
        
        [self.mapView addAnnotation:pint];
    }];
}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    CLLocation *location=[locations firstObject];
    CLLocationCoordinate2D cooldina=location.coordinate;
}


//自定义锚点
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    
    static NSString *str=@"pointid";
    MKAnnotationView *mkan=[mapView dequeueReusableAnnotationViewWithIdentifier:str];
    
    if (mkan==nil) {
        mkan=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:str];
    }
    
    mkan.image=[UIImage imageNamed:@"poi_2"];
    mkan.canShowCallout=YES;
    mkan.selected=YES;
    
    return mkan;
}

+(CLAuthorizationStatus)positionAuthorizationStatus{
    return [CLLocationManager authorizationStatus];
}
+(void)authorizePosition:(CLLocationManager *)manager{
    [manager requestAlwaysAuthorization];
}

MKMapView iOS的地图详细应用

定位功能 定位是一个很常用的功能,如一些地图软件打开之后如果用户允许软件定位的话,那么打开软件后就会自动锁定到当前位置,如果用户手机移动那么当前位置也会跟随着变化。要实现这个功能需要使用Core...

iphone 地图应用。MKMapView

目前几乎所有服务行业的产品都考虑到加入地图的功能,这大大提升了软件的易用和直观性。在iphone 中运用地图并不是一件困难的事情,因为SDK中已经提供了地图控件。 下边是我总结iphon...
  • think12
  • think12
  • 2011年08月14日 17:07
  • 3162

GPS定位MKMapView,CoreLocation

  • 2015年05月13日 12:42
  • 31KB
  • 下载

MKMapView 同时显示多气泡

  • 2016年12月09日 09:18
  • 1.3MB
  • 下载

【iOS开发-110】MapKit框架的主要类MKMapView以及代理方法,大头针的使用addAnnotation

MapKit框架的主要类MKMapView以及代理方法,大头针的使用addAnnotation

mkmapview官网示例

  • 2011年09月02日 15:25
  • 165KB
  • 下载

MKMapView自定义calloutView

  • 2013年07月15日 11:53
  • 76KB
  • 下载

IOS 地图定位,标记位置,获取经纬度,MKMapView的使用

m IOS 地图定位,标注地图,获取经纬度: 一、使用MKMapView 定位 二、在地图上通过经纬度标注(大头针) 项目源码:http://download.csdn.net/d...

MKMapView的使用

 http://blog.csdn.net/swingpyzf/article/details/16801787 一、使用MKMapView 定位 二、在地图上通过经纬度标注(大头针...

MKMapView类——获取并绘制两点之间的路线

- (id) initWithFrame:(CGRect) frame { self = [super initWithFrame:frame]; if (self) { ...
  • lanjin_
  • lanjin_
  • 2013年06月14日 17:48
  • 606
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mkmapView的应用
举报原因:
原因补充:

(最多只允许输入30个字)