一、地圖顯示
1、使用到的框架及相關類
MapKit框架中MKMapView
2、MKMapView的常用屬性
1)跟蹤類型
userTrackingMode
2)地圖類型
mapType
3)用戶位置,只讀屬性
userLocation
4)當前地圖中的所有大頭針,只讀屬性
annotations
5)是否可以縮放
zoomEnabled = NO
6)是否可以滾動
scrollEnabled = NO
7)是否可以旋轉
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)設置地圖顯示區域,用于控制當前屏幕顯示地圖范圍
setRegion
4)設置地圖中心點位置
setCenterCoordinate
5)將地理坐標(經緯度)轉化為數學坐標(UIKit坐標)
convertCoordinate
6)將數學坐標轉換為地理坐標
convertPoint
7)從緩存池中取出大頭針
dequeueReusableAnnotationViewWithIdentifier
8)選中指定的大頭針
selectAnnotation
9)取消選中指定的大頭針
deselectAnnotation
4、代理方法
1)用戶位置發生改變時觸發
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
2)顯示區域發生改變后觸發
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
3)地圖加載完成后觸發
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
4)顯示大頭針時觸發,返回大頭針視圖,通常自定義大頭針可以通過此方法進行
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
5)點擊選中某個大頭針時觸發
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
6)取消選中大頭針時觸發
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
7)渲染地圖覆蓋物時觸發? ? ??
?- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay
二、在地圖上顯示自己位置??
?1、導入MapKit框架 ? ?
2、使用定位管理器CLLocationManager做定位授權
[_locationManager requestWhenInUseAuthorization];
3、創建MKMapView地圖試圖,并添加到他的父試圖上面,我的_mapView已設為全局變量
_mapView = [[MKMapView alloc]initWithFrame:self.view.frame];
[self.view addSubview:_mapView];
4、設置相應屬性
//地圖類型
_mapView.mapType = MKMapTypeStandard;
//跟蹤類型
_mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
5、掛代理
_mapView.delegate = self;
6、顯示用戶位置
_mapView.showsUserLocation = YES;
7、實現代理方法
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
CLLocationCoordinate2D 設置該區域的中心點
MKCoordinateSpan 設置該區域的經緯度跨度
例如:中國經緯度
經度范圍:73.33E 至 135.05E
緯度范圍:2.51N? 至 53.33N
}
PS:總結,如果無法顯示自己的位置,檢查以下幾點:
1、是否將定位管理器設為全局變量
2、是否在項目中進行定位授權,是否在Info.plist中配置
3、是否將showsUserLocation設為YES。
4、是否配置模擬器 點擊模擬器 -> 菜單欄Dubug -> Location -> Apple來使模擬器定位,然后使用Custom Location配置模擬器的經緯度。
三、自定義用戶位置的大頭針
1、地圖上用來顯示當前位置信息的點,其實就是一個大頭針,接下來我們要自定義這個大頭針的樣式
2、使用的框架及相關類
1)MKAnnotationView,屬于MapKit框架
大頭針試圖,能夠自定義,用戶當前位置的大頭針默認樣式是一個原點,非用戶當前位置的大頭針,系統默認用一個類似圖釘樣式的試圖顯示
2)MKAnotation,屬于MapKit框架
大頭針的數據模型,只要一個NSObject類實現MKAnnotation協議就可以作為一個大頭針數據模型、通常重寫協議中的coordinate(位置,必須實現的)、title標題、subtitle(子標題)三個屬性來自定義大頭針的數據模型
3) MKUserLocation
系統定義的大頭針數據模型專門用來表示用戶當前位置大頭針上的數據模型,遵守了MKAnnotation協議。
3、MPAnnotationView相關屬性
1)初始化
initWithAnnotation:reuseIdentifier:
2)設置大頭針圖片
image
3)中心點的偏移量 x正右 y正下
centerOffset
4)插圖的偏移量
calloutOffset
5)是否選中
selected
6)設置是否可以顯示 插入視圖
canShowCallout
7)左側插入視圖的附加視圖
leftCalloutAccessoryView
8)右側插入視圖的附加視圖
rightCalloutAccessoryView:
9)插入視圖的詳細視圖
detailCalloutAccessoryView
10)是否可以拖拽
draggable
11)拖拽的狀態
dragState
4、MKAnotation相關屬性
1)coordinate 經緯度
2)title? 標題
3) subtitle 子標題
3、給地圖試圖添加大頭針的原理如下:
1)準備大頭針試圖模型
2)使用地圖試圖調用addAnnotaion給地圖試圖添加大頭針數據模型
3)然后MKMapView會將數據模型傳給一個代理方法,該代理方法會將該大頭針數據模型包裝到一個大頭針試圖,然后返回該大頭針試圖、返回的帶有數據模型的大頭針試圖便會顯示在地圖上,如果返回為nil,則系統會默認一個大頭針試圖顯示在上面
四、長按添加大頭針
一、地圖顯示
1、創建一個全局的定位管理器
2、獲得定位權限
3、地圖試圖,MKMapView
4、顯示用戶當前位置 showUserlocation
5、設置追蹤類型 userTrackingMode
6、通過setRegin設置地圖顯示區域
經緯度coor? 經緯跨度span
二、自定義大頭針
1、找到大頭針數據模型
2、添加數據模型到地圖試圖上,會調用代理方法
3、通過代理方法,將數據模型包裝到數據模型上
三、 雜談
MKUserlocation? 當前位置的數據模型
MKAnnotation? 大頭針數據模型的協議
MKAnnotationView? 大頭針試圖