自定義高德地圖定位小藍點(用戶位置精度圈)

開發(fā)中有些會遇到地圖的使用甚牲,對于高德地圖當前位置的小藍點彰居,根據(jù)不同的UI效果可能需要實現(xiàn)不同效果,比如講小藍點換成用戶頭像此叠、網(wǎng)絡(luò)頭像等。這里多高德地圖的當前位置“小藍點”進行處理,使得該功能更加實用勿侯,擴展性更強雏赦。

思路:

前提:已經(jīng)集成了高德地圖SDK抬闯,并且設(shè)置了AppKey浑塞,添加了定位權(quán)限相關(guān)設(shè)置,此處參照高德地圖官方文檔孕惜。

1愧薛、首先我們往視圖上添加一個地圖

- (void)creatMapView {
    _mapView = [[MAMapView alloc]initWithFrame:self.view.bounds];
    _mapView.delegate = self;
    _mapView.showsCompass = NO;
    _mapView.showsUserLocation = YES;
    _mapView.userTrackingMode = MAUserTrackingModeFollow;
    _mapView.customizeUserLocationAccuracyCircleRepresentation = YES;
    [self.view addSubview:_mapView];
}

一些基礎(chǔ)屬性的設(shè)置這里不多說,主要說明一下衫画,如果需要高德地圖顯示定位信息毫炉,需要將showUserLocation這個屬性設(shè)置成YES,這個屬性設(shè)置成YES后削罩,用戶定位信息(包括位置與設(shè)備方向等數(shù)據(jù))改變瞄勾,以下代理方法就會執(zhí)行

#pragma mark MAMapViewDelegate
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation {
    
    NSLog(@"%d",updatingLocation);
    NSLog(@"位置更新");
    NSLog(@"當前位置:%f,%f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
}

從此回調(diào)方法中我們可以時時的獲取到用戶當前的經(jīng)緯度信息费奸。

2、顯示地圖定位的“小藍點”进陡,自定義小藍點

以上我們已經(jīng)將_mapView.showsUserLocation設(shè)置成了YES愿阐,如果需要定位追蹤,可以將屬性userTrackingMode設(shè)置成MAUserTrackingModeFollow四濒,該屬性是個枚舉换况。

//如果您需要進入地圖就顯示定位小藍點职辨,則需要下面兩行代碼
_mapView.showsUserLocation = YES;
_mapView.userTrackingMode = MAUserTrackingModeFollow;

要自定義小藍點盗蟆,需要將屬性值customizeUserLocationAccuracyCircleRepresentation設(shè)置成YES

//是否自定義用戶位置精度圈
_mapView.customizeUserLocationAccuracyCircleRepresentation = YES;

2.1 高德SDK提供了類MAUserLocationRepresentation來修改小藍點的外觀等

//注:以下代碼全部摘抄自高德地圖開放平臺
MAUserLocationRepresentation *r = [[MAUserLocationRepresentation alloc] init];
r.showsAccuracyRing = NO;///精度圈是否顯示,默認YES
r.showsHeadingIndicator = NO;///是否顯示方向指示(MAUserTrackingModeFollowWithHeading模式開啟)舒裤。默認為YES
r.fillColor = [UIColor redColor];///精度圈 填充顏色, 默認 kAccuracyCircleDefaultColor
r.strokeColor = [UIColor blueColor];///精度圈 邊線顏色, 默認 kAccuracyCircleDefaultColor
r.lineWidth = 2;///精度圈 邊線寬度喳资,默認0
r.enablePulseAnnimation = NO;///內(nèi)部藍色圓點是否使用律動效果, 默認YES
r.locationDotBgColor = [UIColor greenColor];///定位點背景色,不設(shè)置默認白色
r.locationDotFillColor = [UIColor grayColor];///定位點藍色圓點顏色腾供,不設(shè)置默認藍色
r.image = [UIImage imageNamed:@"你的圖片"]; ///定位圖標, 與藍色原點互斥

以上設(shè)置后還需要調(diào)用一個方法

[self.mapView updateUserLocationRepresentation:r];

以上方式可簡單的實現(xiàn)修改小藍點仆邓,但是可擴展性不強。

2.2 自己設(shè)置高德額地圖的小藍點

不通過MAUserLocationRepresentation設(shè)置但前位置伴鳖。

///是否自定義用戶位置精度圈(userLocationAccuracyCircle)對應(yīng)的 view, 默認為 NO.\n 如果為YES: 會調(diào)用 - (MAOverlayRenderer *)mapView (MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay 若返回nil, 則不加載.\n 如果為NO : 會使用默認的樣式.
//是否自定義用戶位置精度圈
_mapView.customizeUserLocationAccuracyCircleRepresentation = YES;

以上是高德Api里的描述节值,也就是說將customizeUserLocationAccuracyCircleRepresentation設(shè)置成YES,可以自己通過方法定義小藍點榜聂。

當前位置的實質(zhì)也是一個大頭針搞疗,那么我們在添加大頭針的方法里面設(shè)置

- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation {
 
    //用戶當前位置大頭針
    if ([annotation isKindOfClass:[MAUserLocation class]])
    {
        static NSString *userLocationStyleReuseIndetifier = @"userLocationStyleReuseIndetifier";
        
        MAAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:userLocationStyleReuseIndetifier];
        
        if (annotationView == nil)
        {
            annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:userLocationStyleReuseIndetifier];
        }
        
        annotationView.canShowCallout = NO;
        annotationView.image = [UIImage imageNamed:@"heardImg"];
        annotationView.frame = CGRectMake(0, 0, 26, 26);
        annotationView.contentMode = UIViewContentModeScaleToFill;
        annotationView.layer.masksToBounds = YES;
        
        return annotationView;
    }
    
    //其他大頭針設(shè)置
    else if ([annotation isKindOfClass:[MAPointAnnotation class]]) {
        static NSString *locationBackViewReuseIndetifier = @"locationBackViewReuseIndetifier";
        
        MAAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:locationBackViewReuseIndetifier];
        
        if (annotationView == nil)
        {
            annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:locationBackViewReuseIndetifier];
        }

        annotationView.canShowCallout = NO;
        annotationView.image = [UIImage imageNamed:@"heardImg_default"];
        annotationView.frame = CGRectMake(0, 0, 10, 10);
        annotationView.contentMode = UIViewContentModeScaleToFill;
        annotationView.layer.masksToBounds = YES;
    }
    
    return nil;
}

以上方法,只要往地圖上添加大頭針就會通過此方法生成大頭針的view须肆,當前位置也是個大頭針匿乃,通過判斷如果是當前位置的大頭針,我們可以自己定義豌汇。另外通過以下方法自定義小藍點幢炸。

- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay {
    //自定義經(jīng)度對應(yīng)的MACircleView
    if (overlay == mapView.userLocationAccuracyCircle) {
        
        MACircleRenderer *accuracyCircleRenderer = [[MACircleRenderer alloc] initWithCircle:overlay];
        
        accuracyCircleRenderer.lineWidth    = 2.f;
        accuracyCircleRenderer.strokeColor  = [UIColor lightGrayColor];
        accuracyCircleRenderer.fillColor    = [UIColor colorWithRed:1 green:0 blue:0 alpha:.3];
        
        return accuracyCircleRenderer;
    }
    return nil;
}

github地址:
https://github.com/Mexiang/GDMapUserLocation

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拒贱,隨后出現(xiàn)的幾起案子宛徊,更是在濱河造成了極大的恐慌,老刑警劉巖逻澳,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岩调,死亡現(xiàn)場離奇詭異,居然都是意外死亡赡盘,警方通過查閱死者的電腦和手機号枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陨享,“玉大人葱淳,你說我怎么就攤上這事钝腺。” “怎么了赞厕?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵艳狐,是天一觀的道長。 經(jīng)常有香客問我皿桑,道長毫目,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任诲侮,我火速辦了婚禮镀虐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沟绪。我一直安慰自己刮便,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布绽慈。 她就那樣靜靜地躺著恨旱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坝疼。 梳的紋絲不亂的頭發(fā)上搜贤,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音钝凶,去河邊找鬼仪芒。 笑死,一個胖子當著我的面吹牛腿椎,可吹牛的內(nèi)容都是我干的桌硫。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼啃炸,長吁一口氣:“原來是場噩夢啊……” “哼铆隘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起南用,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤膀钠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裹虫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肿嘲,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年筑公,在試婚紗的時候發(fā)現(xiàn)自己被綠了雳窟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡匣屡,死狀恐怖封救,靈堂內(nèi)的尸體忽然破棺而出拇涤,到底是詐尸還是另有隱情,我是刑警寧澤誉结,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布鹅士,位于F島的核電站,受9級特大地震影響惩坑,放射性物質(zhì)發(fā)生泄漏掉盅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一以舒、第九天 我趴在偏房一處隱蔽的房頂上張望趾痘。 院中可真熱鬧,春花似錦稀轨、人聲如沸扼脐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至艰赞,卻和暖如春佣谐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背方妖。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工狭魂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人党觅。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓雌澄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杯瞻。 傳聞我的和親對象是個殘疾皇子镐牺,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

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