MapsDemo

  1 #import "ViewController.h"
  2 //位置
  3 #import <CoreLocation/CoreLocation.h>
  4 //地图
  5 #import <MapKit/MapKit.h>
  6 //标注视图
  7 #import "HLAnnotation.h"
  8 @interface ViewController ()<MKMapViewDelegate>
  9 //位置的管理者
 10 @property (nonatomic,strong) CLLocationManager *manager ;
 11 //地图的对象
 12 @property (nonatomic,strong) MKMapView *mapView;
 13 
 14 @end
 15 
 16 @implementation ViewController
 17 
 18 - (void)viewDidLoad {
 19     [super viewDidLoad];
 20     
 21     //创建位置管理者
 22     self.manager = [[CLLocationManager alloc] init];
 23     if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
 24         
 25         [self.manager requestAlwaysAuthorization];
 26         [self.manager requestWhenInUseAuthorization];
 27     }
 28     //创建地图的对象
 29     self.mapView = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];
 30     [self.view addSubview:self.mapView];
 31     //地图的类型
 32     self.mapView.mapType = MKMapTypeStandard ;
 33     //显示用户的信息
 34     self.mapView.showsUserLocation = YES ;
 35     //设置地图的代理
 36     self.mapView.delegate = self ;
 37     
 38     //添加一个手势
 39     [self.mapView addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGerture:)]];
 40    
 41 }
 42 
 43 #pragma maek --长按手势的关联方法
 44 -(void)longPressGerture:(UILongPressGestureRecognizer *)longPress
 45 {
 46     //获取点击点
 47     CGPoint point = [longPress locationInView:longPress.view];
 48     
 49     //将触摸得到的点,转化为2D坐标的点
 50     CLLocationCoordinate2D coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
 51     
 52     //创建一个标注视图对象
 53     HLAnnotation *annotation = [[HLAnnotation alloc] init];
 54     
 55     //给标注视图设置一个地图上的位置
 56     annotation.coordinate = coordinate ;
 57     
 58     //设置标题
 59     annotation.title = @"china";
 60     
 61     //设置子标题
 62     annotation.subtitle = @"广州";
 63     
 64     static NSInteger a = 1 ;
 65     
 66     //设置tag值
 67     annotation.tag = a ;
 68     a ++ ;
 69     
 70     //将标注视图添加到地图上
 71     [self.mapView addAnnotation:annotation];
 72     
 73 }
 74 #pragma mark --自定义标注视图样式的方法
 75 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
 76 {
 77     //如果系统的用户位置的大头针
 78     if ([annotation isKindOfClass:[MKUserLocation class]]) {
 79         
 80         return nil;
 81     }
 82     
 83     //创建一个重用标示符
 84     static NSString *identifier = @"annotation";
 85     
 86     //创建一个重用队列
 87     MKPinAnnotationView *pin = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
 88     if (pin == nil) {
 89        
 90         pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation     reuseIdentifier:identifier];
 91     }
 92     //设置大头针的往下坠落的效果
 93     pin.animatesDrop = YES ;
 94     //允许打开气泡的属性
 95     pin.canShowCallout = YES ;
 96     
 97     //创建气泡的左右按钮
 98     UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom];
 99     leftButton.frame = CGRectMake(0, 0, 30, 30);
100     [leftButton setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
101     pin.leftCalloutAccessoryView = leftButton ;
102     leftButton.tag = 10086 ;
103     
104     UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
105     rightButton.frame = CGRectMake(0, 0, 30, 30);
106     [rightButton setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateNormal];
107     pin.rightCalloutAccessoryView = rightButton ;
108     rightButton.tag = 10010 ;
109 
110     
111     return pin ;
112 }
113 
114 #pragma mark --点击大头针附件按钮时执行的方法
115 -(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
116 {
117     if (control ==[self.view viewWithTag:10086]) {
118         
119         NSLog(@"左边");
120     }
121     else
122     {
123         NSLog(@"右边");
124     }
125 }
126 #pragma mark --点击标注视图执行的方法
127 -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
128 {
129     NSLog(@"view = %@",view);
130 }
131 
132 #pragma mark --地图区域发生改变时执行的方法
133 -(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
134 {
135     NSLog(@"地图区域发生改变时执行的方法");
136 }
137 
138 #pragma mark --更新用户位置的方法
139 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
140 {
141     NSLog(@"%@",userLocation.location);
142     
143     //设置标题
144     userLocation.title = @"广州市";
145     userLocation.subtitle = @"天河区";
146     //设置地图的比例尺
147     MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
148     //设置范围
149     MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.location.coordinate, span);
150     self.mapView.region = region ;
151 }

自定义标注视图:继承NSObject

 1 #import <Foundation/Foundation.h>
 2 #import <MapKit/MapKit.h>
 3 @interface HLAnnotation : NSObject<MKAnnotation>
 4 
 5 //MKAnnotation协议里面必须实现的属性
 6 @property (nonatomic) CLLocationCoordinate2D coordinate;
 7 
 8 //MKAnnotation协议里面的可选属性
 9 @property (nonatomic,  copy) NSString *title;
10 @property (nonatomic,  copy) NSString *subtitle;
11 
12 //设置一个tag值标记区分每一个标注视图(大头针)
13 @property (nonatomic) NSInteger tag ;
14 
15 @end

 

posted @ 2015-10-12 21:33  YX祥  阅读(172)  评论(0编辑  收藏  举报