iOS開發之MapKit

MapKit框架的使用

導入框架git

 

導入主頭文件框架

#import <MapKit/MapKit.h>atom

MapKit框架使用須知spa

MapKit框架中全部數據類型的前綴都是MK3d

MapKit有一個比較重要的UI控件 MKMapView,專門用於地圖顯示代理

跟蹤顯示用戶的位置

設置MKMapViewuserTrackingMode屬性能夠跟蹤顯示用戶的當前位置code

MKUserTrackingModeNone :不跟蹤用戶的位置對象

MKUserTrackingModeFollow :跟蹤並在地圖上顯示用戶的當前位置blog

MKUserTrackingModeFollowWithHeading :跟蹤並在地圖上顯示用戶的當前位置,地圖會跟隨用戶的前進方向進行旋轉圖片

 

下圖是跟蹤效果

藍色發光圓點就是用戶的當前位置

藍色發光原點,專業術語叫作大頭針

 

地圖的類型

能夠經過設置MKMapViewmapViewType設置地圖類型

MKMapTypeStandard :普通地圖(左圖)

MKMapTypeSatellite :衛星雲圖 (中圖)

MKMapTypeHybrid :普通地圖覆蓋於衛星雲圖之上(右圖) 

                

 

MKMapView的代理

MKMapView能夠設置一個代理對象,用來監聽地圖的相關行爲

 

常見的代理方法有

 1 - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation; 

調用很是頻繁,不斷監測用戶的當前位置

每次調用,都會把用戶的最新位置(userLocation參數)傳進來

 1 - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated; 

地圖的顯示區域即將發生改變的時候調用

 1 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated; 

地圖的顯示區域已經發生改變的時候調用

MKUserLocation

MKUserLocation實際上是個大頭針模型,包括如下屬性

 1 @property (nonatomic, copy) NSString *title; 

顯示在大頭針上的標題

 1 @property (nonatomic, copy) NSString *subtitle; 

顯示在大頭針上的子標題

 1 @property (readonly, nonatomic) CLLocation *location; 

地理位置信息(大頭針釘在什麼地方?)

設置地圖的顯示

經過MKMapView的下列方法,能夠設置地圖顯示的位置和區域

設置地圖的中心點位置

1 @property (nonatomic) CLLocationCoordinate2D centerCoordinate;
2 
3 - (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;

設置地圖的顯示區域

1 @property (nonatomic) MKCoordinateRegion region;
2 
3 - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

MKCoordinateRegion

MKCoordinateRegion是一個用來表示區域的結構體,定義以下

1 typedef struct {
2 
3       CLLocationCoordinate2D center; // 區域的中心點位置
4 
5       MKCoordinateSpan span; // 區域的跨度
6 
7 } MKCoordinateRegion;

MKCoordinateSpan的定義

1 typedef struct {
2 
3     CLLocationDegrees latitudeDelta; // 緯度跨度
4 
5     CLLocationDegrees longitudeDelta; // 經度跨度
6 
7 } MKCoordinateSpan;

大頭針

什麼是大頭針

現實生活中的大頭針

地圖上的大頭針

釘在某個具體位置,用來標識這個位置上有特定的事物(好比這個位置上有家餐館)

大頭針的基本操做

添加一個大頭針

- (void)addAnnotation:(id <MKAnnotation>)annotation;

添加多個大頭針

- (void)addAnnotations:(NSArray *)annotations;

移除一個大頭針

- (void)removeAnnotation:(id <MKAnnotation>)annotation;

 移除多個大頭針

- (void)removeAnnotations:(NSArray *)annotations;

(id <MKAnnotation>)annotation參數是什麼東西?

大頭針模型對象:用來封裝大頭針的數據,好比大頭針的位置、標題、子標題等數據

大頭針模型

新建一個大頭針模型類

 1 #import <MapKit/MapKit.h>
 2 
 3 @interface MJTuangouAnnotation : NSObject <MKAnnotation>
 4 /** 座標位置 */
 5 @property (nonatomic, assign) CLLocationCoordinate2D coordinate;
 6 /** 標題 */
 7 @property (nonatomic, copy) NSString *title; 
 8 /** 子標題 */
 9 @property (nonatomic, copy) NSString *subtitle; 
10 @end

添加大頭針

1 MJTuangouAnnotation *anno = [[MJTuangouAnnotation alloc] init];
2 anno.title = @"你怎麼看";
3 anno.subtitle = @"我趴窗戶上看";
4 anno.coordinate = CLLocationCoordinate2DMake(40, 116);
5 [self.mapView addAnnotation:anno];

自定義大頭針

不少狀況下,須要自定義大頭針的顯示樣式,好比顯示一張圖片

 

自定義大頭針

如何自定義大頭針

設置MKMapView的代理

實現下面的代理方法,返回大頭針控件

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;

根據傳進來的(id <MKAnnotation>)annotation參數建立並返回對應的大頭針控件

 

代理方法的使用注意

若是返回nil,顯示出來的大頭針就採起系統的默認樣式

標識用戶位置的藍色發光圓點,它也是一個大頭針,當顯示這個大頭針時,也會調用代理方法

所以,須要在代理方法中分清楚(id <MKAnnotation>)annotation參數表明自定義的大頭針仍是藍色發光圓點

 1 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
 2 {
 3     // 判斷annotation的類型
 4     if (![annotation isKindOfClass:[MJTuangouAnnotation class]]) return nil;
 5     
 6     // 建立MKAnnotationView
 7     static NSString *ID = @"tuangou";
 8     MKAnnotationView *annoView = [mapView dequeueReusableAnnotationViewWithIdentifier:ID];
 9     if (annoView == nil) {
10         annoView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];
11         annoView.canShowCallout = YES;
12     }
13     // 傳遞模型數據
14     annoView.annotation = annotation;
15     
16     // 設置圖片
17         MJTuangouAnnotation *tuangouAnnotation = annotation;
18     annoView.image = [UIImage imageNamed:tuangouAnnotation.icon];
19     
20     return annoView;
21 }

MKAnnotationView

地圖上的大頭針控件是MKAnnotationView

 MKAnnotationView的屬性

 1 @property (nonatomic, strong) id <MKAnnotation> annotation;
 2 大頭針模型
 3 
 4 @property (nonatomic, strong) UIImage *image;
 5 顯示的圖片
 6 
 7 @property (nonatomic) BOOL canShowCallout;
 8 是否顯示標註
 9 
10 @property (nonatomic) CGPoint calloutOffset;
11 標註的偏移量
12 
13 @property (strong, nonatomic) UIView *rightCalloutAccessoryView;
14 標註右邊顯示什麼控件
15 
16 @property (strong, nonatomic) UIView *leftCalloutAccessoryView;
17 標註左邊顯示什麼控件

MKPinAnnotationView

MKPinAnnotationViewMKAnnotationView的子類

MKPinAnnotationViewMKAnnotationView多了2個屬性

1 @property (nonatomic) MKPinAnnotationColor pinColor;
2 大頭針顏色
3 
4 @property (nonatomic) BOOL animatesDrop;
5 大頭針第一次顯示時是否從天而降
相關文章
相關標籤/搜索