地圖大頭針的高級操作

一杜顺、地圖顯示

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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邻吞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子葫男,更是在濱河造成了極大的恐慌抱冷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢褐,死亡現(xiàn)場離奇詭異旺遮,居然都是意外死亡,警方通過查閱死者的電腦和手機盈咳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門耿眉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鱼响,你說我怎么就攤上這事跷敬。” “怎么了热押?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斤寇。 經(jīng)常有香客問我桶癣,道長,這世上最難降的妖魔是什么娘锁? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任牙寞,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘间雀。我一直安慰自己悔详,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布惹挟。 她就那樣靜靜地躺著茄螃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪连锯。 梳的紋絲不亂的頭發(fā)上归苍,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音运怖,去河邊找鬼拼弃。 笑死,一個胖子當(dāng)著我的面吹牛摇展,可吹牛的內(nèi)容都是我干的吻氧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咏连,長吁一口氣:“原來是場噩夢啊……” “哼盯孙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捻勉,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤镀梭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踱启,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體报账,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年埠偿,在試婚紗的時候發(fā)現(xiàn)自己被綠了透罢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡冠蒋,死狀恐怖羽圃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抖剿,我是刑警寧澤朽寞,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站斩郎,受9級特大地震影響脑融,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缩宜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一肘迎、第九天 我趴在偏房一處隱蔽的房頂上張望甥温。 院中可真熱鬧,春花似錦妓布、人聲如沸姻蚓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狰挡。三九已至,卻和暖如春肛著,著一層夾襖步出監(jiān)牢的瞬間圆兵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工枢贿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殉农,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓局荚,卻偏偏與公主長得像超凳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耀态,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容