列出關(guān)鍵幾點:
創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、云龍網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5技術(shù)、商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為云龍等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
1. 百度上注冊開發(fā)者賬號,申請app AK,下載sdk
2. 加入sdk文件到代碼中
3. appDelegate 中注冊:
1)首先 #import"BMapKit.h"
2)didFinishLaunchingWithOptions方法中加入下面代碼
// 要使用百度地圖,請先啟動BaiduMapManager
_mapManager = [[BMKMapManageralloc]init];
BOOL ret = [_mapManagerstart:@"mG6DBmXxsgFjc4CMB3ruX7Gr"generalDelegate:self];
if (!ret) {
NSLog(@"baidu map api: ---------- ------manager start failed!");
}
3)applicationWillResignActive方法中加入下面代碼
[BMKMapViewwillBackGround];//百度地圖api
4)applicationDidBecomeActive方法中加入下面代碼
[BMKMapView willBackGround];// 百度地圖api
5)AppDelegate實現(xiàn)代理 BMKGeneralDelegate
//代理方法
- (void)onGetNetworkState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------聯(lián)網(wǎng)成功");
}
else{
NSLog(@"baidu map api: ---------- ------onGetNetworkState %d",iError);
}
}
//代理方法
- (void)onGetPermissionState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------授權(quán)成功");
}
else {
NSLog(@"baidu map api: ---------- ------onGetPermissionState %d",iError);
}
}
4 Build Settings - Other Linker Flags 去掉 -all_load
這個是為了解決問題: duplicate symbols for architecture armv7
5. 定位代碼
- (void)viewDidLoad {
[superviewDidLoad];
//設(shè)置定位精確度,默認:kCLLocationAccuracyBest
//[BMKLocationServicesetLocationDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
//指定最小距離更新(米),默認:kCLDistanceFilterNone
//[BMKLocationServicesetLocationDistanceFilter:100.f];
// 利用百度地圖api定位
//初始化BMKLocationService
_locService = [[BMKLocationServicealloc]init];
_locService.delegate =self;
//啟動LocationService
[_locServicestartUserLocationService];
對應代理BMKLocationServiceDelegate
// 代理方法
#pragma mark - BMKLocationServiceDelegate
//實現(xiàn)相關(guān)delegate處理位置信息更新
//處理方向變更信息
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
//NSLog(@"heading is %@",userLocation.heading);
}
//處理位置坐標更新
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
// NSLog(@"定位經(jīng)緯度: lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
//[GlobalsetCurrentPosition:userLocation.location.coordinate];
}
[BMKMapView willBackGround];// 百度地圖api
參考網(wǎng)站
前言
在ios上邊使用地圖庫的同學肯定遇到過這樣的問題:吹出框只能設(shè)置title和subtitle和左右的view,不管是百度地圖還是高德地圖還是自帶的google地圖,只提供了這四個屬性,如果想添加更多的view,只能自定義??墒?,類庫只能看到.h文件,.m都看不到,這讓新手比較蛋疼,龐大的地圖類庫一時半會摸不著頭腦,從頭再學還需要時間,本文就教大家快速制作一個屬于自己的 CalloutView!等你一步一步調(diào)通后,再回過頭來使用系統(tǒng)自帶的方法設(shè)置callout,就會領(lǐng)悟這個過程。
正文
Xcode版本:4.6.1
SDK版本:6.0
百度地圖版本:1.2.2(關(guān)于地圖不必糾結(jié),無論是百度還是高德還是google都是基于系統(tǒng)的MapKit,都是一樣的)
demo模式:非ARC,使用storyboard。
demo資源:
Step1
創(chuàng)建demo,并添加百度地圖的靜態(tài)類庫,helloword能顯示mapview
關(guān)于這一步我專門寫了教程,這里就不再贅述,同樣,關(guān)于如何使用自帶的BMKPointAnnotation添加一個marker,我也不再說了,如果連這個你都不會,那么先去官網(wǎng)看一下基本教程。
Step2
實現(xiàn)三個委托方法:
這個方法類似tableview添加cell,都是創(chuàng)建annotation
這個方法在點擊地圖marker時所觸發(fā)(并顯示callout)
原理:地圖上的marker是在viewForAnnoation里創(chuàng)建的,同時也會隱含的為我們創(chuàng)建一個CalloutView,就是自帶的吹出框,只是我們看不到源碼。其實這個吹出框(CalloutView)也是一個annotation,也會在viewForAnnotation里被創(chuàng)建,他的坐標應該和這個點的marker坐標一樣,只要明白了這一點,就行了,marker和吹出框是兩個不同的annotation,他們有同樣的coordinate。
Step3
自定義一個Annotation,為了簡單方便,我就直接繼承了mapview自帶的BMKPointAnnotation,這是一個經(jīng)典的
(void)longPress:(UIGestureRecognizer*)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ //這個狀態(tài)判斷很重要
//坐標轉(zhuǎn)換
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
//這里的touchMapCoordinate.latitude和touchMapCoordinate.longitude就是想要的經(jīng)緯度,
NSLog(@"%f",touchMapCoordinate.latitude);
NSLog(@"%f",touchMapCoordinate.longitude);
//30.264998 120.122538 30.285012 120.117989
LocationObject *aLocationObject = [[LocationObject alloc]initWithTitle:@"hello" latitue:touchMapCoordinate.latitude longitude:touchMapCoordinate.longitude];
aLocationObject._subTitleString = @"world";
NSMutableArray *_mapAnnotations = [[NSMutableArray alloc]initWithCapacity:1];
[_mapAnnotations addObject:aLocationObject];
[self.mapView addAnnotations:_mapAnnotations ];
[_mapAnnotations release];
[aLocationObject release];
}
}