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?
轉載于:https://www.cnblogs.com/yyxblogs/p/4872876.html
總結
- 上一篇: Headmaster's Headach
- 下一篇: 如何编写一份软件工程实验报告