一杜顺、地圖顯示
1、使用到的框架及相關(guān)類
MapKit框架中MKMapView
2蘸炸、MKMapView的常用屬性
1)跟蹤類型
userTrackingMode
2)地圖類型
mapType
3)用戶位置躬络,只讀屬性
userLocation
4)當(dāng)前地圖中的所有大頭針,只讀屬性
annotations
5)是否可以縮放
zoomEnabled = NO
6)是否可以滾動
scrollEnabled = NO
7)是否可以旋轉(zhuǎn)
rotateEnabled = NO;
8)是否顯示3D
pitchEnabled = NO
9)是否顯示指南針
showsCompass = YES
10)是否顯示比例尺
showsScale = YES
11)是否顯示交通
showsTraffic = YES
12)是否顯示建筑物
showsBuildings = YES
3搭儒、MKMapView的常用方法
1)添加大頭針
addAnnotation
2)刪除大頭針
removeAnnotation
3)設(shè)置地圖顯示區(qū)域穷当,用于控制當(dāng)前屏幕顯示地圖范圍
setRegion
4)設(shè)置地圖中心點位置
setCenterCoordinate
5)將地理坐標(biāo)(經(jīng)緯度)轉(zhuǎn)化為數(shù)學(xué)坐標(biāo)(UIKit坐標(biāo))
convertCoordinate
6)將數(shù)學(xué)坐標(biāo)轉(zhuǎn)換為地理坐標(biāo)
convertPoint
7)從緩存池中取出大頭針
dequeueReusableAnnotationViewWithIdentifier
8)選中指定的大頭針
selectAnnotation
9)取消選中指定的大頭針
deselectAnnotation
4提茁、代理方法
1)用戶位置發(fā)生改變時觸發(fā)
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
2)顯示區(qū)域發(fā)生改變后觸發(fā)
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
3)地圖加載完成后觸發(fā)
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
4)顯示大頭針時觸發(fā),返回大頭針視圖馁菜,通常自定義大頭針可以通過此方法進行
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
5)點擊選中某個大頭針時觸發(fā)
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
6)取消選中大頭針時觸發(fā)
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
7)渲染地圖覆蓋物時觸發(fā)
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
二茴扁、在地圖上顯示自己位置
1、導(dǎo)入MapKit框架
#import <MapKit/MapKit.h>
2汪疮、使用定位管理器CLLocationManager做定位授權(quán)
[_locationManager requestWhenInUseAuthorization];
3峭火、創(chuàng)建MKMapView地圖試圖,并添加到他的父試圖上面,我的_mapView已設(shè)為全局變量
_mapView = [[MKMapView alloc]initWithFrame:self.view.frame];
[self.view addSubview:_mapView];
4智嚷、設(shè)置相應(yīng)屬性
//地圖類型
_mapView.mapType = MKMapTypeStandard;
//跟蹤類型
_mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
5卖丸、掛代理
_mapView.delegate = self;
6、顯示用戶位置
_mapView.showsUserLocation = YES;
7纤勒、實現(xiàn)代理方法
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
CLLocationCoordinate2D 設(shè)置該區(qū)域的中心點
MKCoordinateSpan 設(shè)置該區(qū)域的經(jīng)緯度跨度
例如:中國經(jīng)緯度
經(jīng)度范圍:73.33E 至 135.05E
緯度范圍:2.51N 至 53.33N
}
PS:總結(jié)坯苹,如果無法顯示自己的位置,檢查以下幾點:
1摇天、是否將定位管理器設(shè)為全局變量
2粹湃、是否在項目中進行定位授權(quán),是否在Info.plist中配置
3泉坐、是否將showsUserLocation設(shè)為YES为鳄。
4、是否配置模擬器 點擊模擬器 -> 菜單欄Dubug -> Location -> Apple來使模擬器定位腕让,然后使用Custom Location配置模擬器的經(jīng)緯度孤钦。
三、自定義用戶位置的大頭針
1纯丸、地圖上用來顯示當(dāng)前位置信息的點偏形,其實就是一個大頭針,接下來我們要自定義這個大頭針的樣式
2觉鼻、使用的框架及相關(guān)類
1)MPAnnotationView,屬于MapKit框架
大頭針試圖俊扭,能夠自定義,用戶當(dāng)前位置的大頭針默認(rèn)樣式是一個原點坠陈,非用戶當(dāng)前位置的大頭針萨惑,系統(tǒng)默認(rèn)用一個類似圖釘樣式的試圖顯示
2)MKAnotation,屬于MapKit框架
大頭針的數(shù)據(jù)模型仇矾,只要一個NSObject類實現(xiàn)MKAnnotation協(xié)議就可以作為一個大頭針數(shù)據(jù)模型庸蔼、通常重寫協(xié)議中的coordinate(位置,必須實現(xiàn)的)贮匕、title標(biāo)題姐仅、subtitle(子標(biāo)題)三個屬性來自定義大頭針的數(shù)據(jù)模型
3) MKUserLocation
系統(tǒng)定義的大頭針數(shù)據(jù)模型專門用來表示用戶當(dāng)前位置大頭針上的數(shù)據(jù)模型,遵守了MKAnnotation協(xié)議。
3萍嬉、MPAnnotationView相關(guān)屬性
1)初始化
initWithAnnotation:reuseIdentifier:
2)設(shè)置大頭針圖片
image
3)中心點的偏移量 x正右 y正下
centerOffset
4)插圖的偏移量
calloutOffset
5)是否選中
selected
6)設(shè)置是否可以顯示 插入視圖
canShowCallout
7)左側(cè)插入視圖的附加視圖
leftCalloutAccessoryView
8)右側(cè)插入視圖的附加視圖
rightCalloutAccessoryView:
9)插入視圖的詳細視圖
detailCalloutAccessoryView
10)是否可以拖拽
draggable
11)拖拽的狀態(tài)
dragState
4乌昔、MKAnotation相關(guān)屬性
1)coordinate 經(jīng)緯度
2)title 標(biāo)題
3) subtitle 子標(biāo)題
3、給地圖試圖添加大頭針的原理如下:
1)準(zhǔn)備大頭針試圖模型
2)使用地圖試圖調(diào)用addAnnotaion給地圖試圖添加大頭針數(shù)據(jù)模型
3)然后MKMapView會將數(shù)據(jù)模型傳給一個代理方法壤追,該代理方法會將該大頭針數(shù)據(jù)模型包裝到一個大頭針試圖磕道,然后返回該大頭針試圖、返回的帶有數(shù)據(jù)模型的大頭針試圖便會顯示在地圖上行冰,如果返回為nil,則系統(tǒng)會默認(rèn)一個大頭針試圖顯示在上面
四溺蕉、長按添加大頭針
一、需求:
1悼做、批量疯特、分類添加大頭針
2、大頭針樣式設(shè)置
1) MKAnnotationView
不能設(shè)置大頭針的顏色
不能設(shè)置動畫效果
能夠自定義大頭針的圖片
2)MKPinAnnotationView
繼承MKAnnotationView
可以設(shè)置糖的顏色
可以設(shè)置動畫效果
不能給自定義大頭針的圖片
3肛走、即自定義大頭針的圖片又實現(xiàn)動畫效果
//大頭針顯示在試圖上時調(diào)用漓雅,我在這里給大頭針設(shè)置顯示動畫
- (void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
//獲取到mapview的frame
CGRect visibleRect = _mapView.frame;
for (MKAnnotationView *view in views) {
CGRect endFrame = view.frame;
CGRect startFrame = endFrame;
startFrame.origin.y = visibleRect.origin.y - startFrame.size.height;
view.frame = startFrame;
[UIView animateWithDuration:1 animations:^{
view.frame = endFrame;
}];
}
}
3、自定義大頭針試圖
4朽色、點擊大頭針的輔助圖標(biāo)