地圖高級 - 自定義大頭針

地圖高級 - 自定義大頭針


自定義大頭針.png

1. 理論支撐

按照MVC的原則
    1. 每當添加一個大頭針數(shù)據(jù)模型時, 地圖就會調(diào)用對應(yīng)的代理方法, 查找對應(yīng)的大頭針視圖,顯示在地圖上;
    2. 如果該方法沒有實現(xiàn), 或者返回nil, 那么就會使用系統(tǒng)默認的大頭針視圖

2. 模擬實現(xiàn)系統(tǒng)大頭針

  1. 實現(xiàn)當添加大頭針數(shù)據(jù)模型時,地圖回調(diào)的代理方法

    -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(XXXAnnotation *)annotation
    {
    
    }
    
  2. 實現(xiàn)須知

     1. 大頭針系統(tǒng)對應(yīng)的視圖是 MKPinAnnotationView损同,它繼承自 MKAnnotationView
     2. 地圖上的大頭針視圖脖旱,和tableview上的cell一樣忽冻,都使用“循環(huán)利用”的機制
    
  3. 實現(xiàn)代碼

    // 定義緩存標識
    static NSString *pinID = @"pinID";
    
    // 緩存中取大頭針
    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinID];
    
    // 緩存中不存在大頭針璧亚,則創(chuàng)建
    if (!pinView) {
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:pinID];
    }
    
    // 設(shè)置模型數(shù)據(jù)
    pinView.annotation = annotation;
    
    // 彈出標注
    pinView.canShowCallout = YES;
    
    // 修改大頭針顏色
    pinView.pinColor = MKPinAnnotationColorPurple;
    
    // 設(shè)置大頭針從天而降
    pinView.animatesDrop = YES;
    
    // 設(shè)置大頭針可以被拖拽(父類中的屬性)
    pinView.draggable = YES;
    
    return pinView;
    

3. 自定義大頭針

  1. 實現(xiàn)當添加大頭針數(shù)據(jù)模型時,地圖回調(diào)的代理方法

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(XXXAnnotation *)annotation
{

}
```
  1. 實現(xiàn)須知

     1. 如果想要自定義大頭針, 必須使用 MKAnnotationView 或者 自定義的子類
     2. 但是不能直接使用系統(tǒng)默認的大頭針, 會無效
    
  2. 實現(xiàn)代碼

        // 自定義大頭針
        static NSString *pinID = @"pinID";
        MKAnnotationView *customPinView = [mapView dequeueReusableAnnotationViewWithIdentifier:pinID];
        if (!customPinView) {
            customPinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinID];
        }

        // 設(shè)置大頭針圖片
            customPinView.image = [UIImage imageNamed:@"category_3"];

        // 設(shè)置大頭針可以彈出標注
            customPinView.canShowCallout = YES;

        // 設(shè)置標注左側(cè)視圖
            UIImageView *leftIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
            leftIV.image = [UIImage imageNamed:@"huba.jpeg"];
            customPinView.leftCalloutAccessoryView = leftIV;

        // 設(shè)置標注右側(cè)視圖
            UIImageView *rightIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
            rightIV.image = [UIImage imageNamed:@"eason.jpg"];
            customPinView.rightCalloutAccessoryView = rightIV;

        // 設(shè)置標注詳情視圖(iOS9.0)
            customPinView.detailCalloutAccessoryView = [[UISwitch alloc] init];

        return customPinView;

4. 代理方法補充

  1. 選中一個大頭針時調(diào)用

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
NSLog(@"選中%@", [view.annotation title]);
}
```

  1. 取消選中大頭針時調(diào)用

    -(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
        {
            NSLog(@"取消選中%@", [view.annotation title]);
        }
    

5. 其他方法補充

  1. 添加導(dǎo)航條上的用戶追蹤按鈕
    navigationItem.leftBarButtonItem = MKUserTrackingBarButtonItem(mapView: mapView)
    

6. 測試環(huán)境

    1. 加載地圖數(shù)據(jù)需要聯(lián)網(wǎng)
    2. XCode版本不限
    3. iOS系統(tǒng)版本不限

7. 常見問題總結(jié)

    1. 代碼運行在低版本的XCode上, 編譯失敗
        第一: 語法錯誤; XCode7.0 對于OC語法優(yōu)化了一些, 需要手動調(diào)整
        第二: iOS9.0的SDK, 在XCode7.0之前的版本沒有對應(yīng)的API
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爆雹,一起剝皮案震驚了整個濱河市叔营,隨后出現(xiàn)的幾起案子有巧,更是在濱河造成了極大的恐慌爸吮,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件望门,死亡現(xiàn)場離奇詭異形娇,居然都是意外死亡,警方通過查閱死者的電腦和手機筹误,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門桐早,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厨剪,你說我怎么就攤上這事哄酝。” “怎么了丽惶?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵炫七,是天一觀的道長爬立。 經(jīng)常有香客問我钾唬,道長,這世上最難降的妖魔是什么侠驯? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任抡秆,我火速辦了婚禮,結(jié)果婚禮上吟策,老公的妹妹穿的比我還像新娘儒士。我一直安慰自己,他們只是感情好檩坚,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布着撩。 她就那樣靜靜地躺著,像睡著了一般匾委。 火紅的嫁衣襯著肌膚如雪拖叙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天赂乐,我揣著相機與錄音薯鳍,去河邊找鬼。 笑死挨措,一個胖子當著我的面吹牛挖滤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浅役,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼斩松,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了觉既?” 一聲冷哼從身側(cè)響起砸民,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岭参,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體反惕,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年演侯,在試婚紗的時候發(fā)現(xiàn)自己被綠了姿染。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡秒际,死狀恐怖悬赏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娄徊,我是刑警寧澤闽颇,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站寄锐,受9級特大地震影響兵多,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜橄仆,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一剩膘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盆顾,春花似錦怠褐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宪巨,卻和暖如春磷杏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揖铜。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工茴丰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人天吓。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓贿肩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親龄寞。 傳聞我的和親對象是個殘疾皇子汰规,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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