Map地圖

MapKit:用于地圖展示

CoreLocation:用于地理定位

CoreLocation框架的使用

CLLocationManager

CLLocationManager的常用操作

開(kāi)始用戶定位

- (void)startUpdatingLocation;

停止用戶定位

- (void)stopUpdatingLocation;

當(dāng)調(diào)用了startUpdatingLocation方法后,就開(kāi)始不斷地定位用戶的位置绑蔫,中途會(huì)頻繁地調(diào)用代理的下面方法

- (void)locationManager:(CLLocationManager*)managerdidUpdateLocations:(NSArray*)locations;

locations參數(shù)里面裝著CLLocation對(duì)象

CLLocation

CLLocation用來(lái)表示某個(gè)位置的地理信息,比如經(jīng)緯度击孩、海拔等等

@property(readonly,nonatomic)CLLocationCoordinate2Dcoordinate;

經(jīng)緯度

@property(readonly,nonatomic)CLLocationDistancealtitude;

海拔

@property(readonly,nonatomic)CLLocationDirectioncourse;

路線,航向(取值范圍是0.0°~359.9°啦桌,0.0°代表正北方向)

@property(readonly,nonatomic)CLLocationSpeedspeed;

行走速度(單位是m/s)

用- (CLLocationDistance)distanceFromLocation:(constCLLocation*)location方法可以計(jì)算2個(gè)位置之間的距離

CLLocationManager

@property(assign,nonatomic)CLLocationDistancedistanceFilter;

每隔多少米定位一次 例如:locationManager.distanceFilter = 1000.0f;

@property(assign,nonatomic)CLLocationAccuracydesiredAccuracy;

定位精確度(越精確就越耗電)例如:desiredAccuracy=10那么精確度就是10米

CLLocationCoordinate2D

CLLocationCoordinate2D是一個(gè)用來(lái)表示經(jīng)緯度的結(jié)構(gòu)體溯壶,定義如下

typedefstruct{

CLLocationDegreeslatitude;//緯度

CLLocationDegreeslongitude;//經(jīng)度

} CLLocationCoordinate2D;

一般用CLLocationCoordinate2DMake函數(shù)來(lái)創(chuàng)建CLLocationCoordinate2D

用戶隱私的保護(hù)

開(kāi)發(fā)者可以在Info.plist中設(shè)置NSLocationUsageDescription說(shuō)明定位的目的(Privacy - Location Usage Description)

一旦用戶選擇了“Don’tAllow”,意味著你的應(yīng)用以后就無(wú)法使用定位功能

為了嚴(yán)謹(jǐn)起見(jiàn)甫男,最好在使用定位功能之前判斷當(dāng)前應(yīng)用的定位功能是否可用

CLLocationManager有個(gè)類方法可以判斷當(dāng)前應(yīng)用的定位功能是否可用

+ (BOOL)locationServicesEnabled;

CLGeocoder

使用CLGeocoder可以完成“地理編碼”和“反地理編碼”

地理編碼:根據(jù)給定的地名且改,獲得具體的位置信息(比如經(jīng)緯度、地址的全稱等)

反地理編碼:根據(jù)給定的經(jīng)緯度板驳,獲得具體的位置信息

地理編碼方法

- (void)geocodeAddressString:(NSString*)addressStringcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;

反地理編碼方法

- (void)reverseGeocodeLocation:(CLLocation*)locationcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;

CLGeocodeCompletionHandler

當(dāng)?shù)乩韁反地理編碼完成時(shí)又跛,就會(huì)調(diào)用CLGeocodeCompletionHandler

typedefvoid(^CLGeocodeCompletionHandler)(NSArray*placemarks,NSError*error);

這個(gè)block傳遞2個(gè)參數(shù)

error:當(dāng)編碼出錯(cuò)時(shí)(比如編碼不出具體的信息)有值

placemarks:里面裝著CLPlacemark對(duì)象

CLPlacemark

CLPlacemark的字面意思是地標(biāo),封裝詳細(xì)的地址位置信息

@property(nonatomic,readonly)CLLocation*location;

地理位置

@property(nonatomic,readonly)CLRegion*region;

區(qū)域

@property(nonatomic,readonly)NSDictionary*addressDictionary;

詳細(xì)的地址信息

@property(nonatomic,readonly)NSString*name;

地址名稱

@property(nonatomic,readonly)NSString*locality;

城市

MapKit框架的使用

跟蹤顯示用戶的位置

設(shè)置MKMapView的userTrackingMode屬性可以跟蹤顯示用戶的當(dāng)前位置

MKUserTrackingModeNone:不跟蹤用戶的位置

MKUserTrackingModeFollow:跟蹤并在地圖上顯示用戶的當(dāng)前位置

MKUserTrackingModeFollowWithHeading:跟蹤并在地圖上顯示用戶的當(dāng)前位置若治,地圖會(huì)跟隨用戶的前進(jìn)方向進(jìn)行旋轉(zhuǎn)

下圖是跟蹤效果

藍(lán)色發(fā)光圓點(diǎn)就是用戶的當(dāng)前位置

藍(lán)色發(fā)光原點(diǎn)慨蓝,專業(yè)術(shù)語(yǔ)叫做“大頭針”

地圖的類型

可以通過(guò)設(shè)置MKMapView的mapViewType設(shè)置地圖類型

MKMapTypeStandard:普通地圖(左圖)

MKMapTypeSatellite:衛(wèi)星云圖 (中圖)

MKMapTypeHybrid:普通地圖覆蓋于衛(wèi)星云圖之上

MKMapView的代理

MKMapView可以設(shè)置一個(gè)代理對(duì)象,用來(lái)監(jiān)聽(tīng)地圖的相關(guān)行為

常見(jiàn)的代理方法有

- (void)mapView:(MKMapView*)mapViewdidUpdateUserLocation:(MKUserLocation*)userLocation;

調(diào)用非常頻繁端幼,不斷監(jiān)測(cè)用戶的當(dāng)前位置

每次調(diào)用礼烈,都會(huì)把用戶的最新位置(userLocation參數(shù))傳進(jìn)來(lái)

- (void)mapView:(MKMapView*)mapViewregionWillChangeAnimated:(BOOL)animated;

地圖的顯示區(qū)域即將發(fā)生改變的時(shí)候調(diào)用

- (void)mapView:(MKMapView*)mapViewregionDidChangeAnimated:(BOOL)animated;

地圖的顯示區(qū)域已經(jīng)發(fā)生改變的時(shí)候調(diào)用

MKUserLocation

@property(nonatomic,copy)NSString*title;

顯示在大頭針上的標(biāo)題

@property(nonatomic,copy)NSString*subtitle;

顯示在大頭針上的子標(biāo)題

@property(readonly,nonatomic)CLLocation*location;

地理位置信息

設(shè)置地圖的顯示

通過(guò)MKMapView的下列方法,可以設(shè)置地圖顯示的位置和區(qū)域

設(shè)置地圖的中心點(diǎn)位置

@property(nonatomic)CLLocationCoordinate2DcenterCoordinate;

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;

設(shè)置地圖的顯示區(qū)域

@property(nonatomic)MKCoordinateRegionregion;

- (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

MKCoordinateRegion

MKCoordinateRegion是一個(gè)用來(lái)表示區(qū)域的結(jié)構(gòu)體婆跑,定義如下

typedefstruct{

CLLocationCoordinate2Dcenter;//區(qū)域的中心點(diǎn)位置

MKCoordinateSpanspan;//區(qū)域的跨度

}MKCoordinateRegion;

MKCoordinateSpan的定義

typedefstruct{

CLLocationDegreeslatitudeDelta;//緯度跨度

CLLocationDegreeslongitudeDelta;//經(jīng)度跨度

}MKCoordinateSpan;

大頭針的基本操作

添加一個(gè)大頭針

- (void)addAnnotation:(id)annotation;

添加多個(gè)大頭針

-(void)addAnnotations:(NSArray*)annotations;

移除一個(gè)大頭針

- (void)removeAnnotation:(id)annotation;

移除多個(gè)大頭針

- (void)removeAnnotations:(NSArray*)annotations;

(id)annotation參數(shù)是什么東西此熬?

大頭針模型對(duì)象:用來(lái)封裝大頭針的數(shù)據(jù),比如大頭針的位置滑进、標(biāo)題犀忱、子標(biāo)題等數(shù)據(jù)

大頭針模型

新建一個(gè)大頭針模型類

#import

@interfaceMJTuangouAnnotation:NSObject

/**坐標(biāo)位置 */

@property(nonatomic,assign)CLLocationCoordinate2Dcoordinate;

/**標(biāo)題 */

@property(nonatomic,copy)NSString*title;

/**子標(biāo)題 */

@property(nonatomic,copy)NSString*subtitle;

@end

添加大頭針

MJTuangouAnnotation*anno = [[MJTuangouAnnotationalloc]init];

anno.title=@“大頭針";

anno.subtitle=@“這真的是大頭針";

anno.coordinate=CLLocationCoordinate2DMake(40,116);

[self.mapViewaddAnnotation:anno];

自定義大頭針

如何自定義大頭針

設(shè)置MKMapView的代理

實(shí)現(xiàn)下面的代理方法,返回大頭針控件

- (MKAnnotationView*)mapView:(MKMapView*)mapViewviewForAnnotation:(id)annotation;

根據(jù)傳進(jìn)來(lái)的(id)annotation參數(shù)創(chuàng)建并返回對(duì)應(yīng)的大頭針控件

代理方法的使用注意

如果返回nil扶关,顯示出來(lái)的大頭針就采取系統(tǒng)的默認(rèn)樣式

標(biāo)識(shí)用戶位置的藍(lán)色發(fā)光圓點(diǎn)阴汇,它也是一個(gè)大頭針,當(dāng)顯示這個(gè)大頭針時(shí)节槐,也會(huì)調(diào)用代理方法

因此搀庶,需要在代理方法中分清楚(id)annotation參數(shù)代表自定義的大頭針還是藍(lán)色發(fā)光圓點(diǎn)

- (MKAnnotationView*)mapView:(MKMapView*)mapViewviewForAnnotation:(id)annotation

{

//判斷annotation的類型

if(![annotationisKindOfClass:[MJTuangouAnnotationclass]])returnnil;

//創(chuàng)建MKAnnotationView

staticNSString*ID =@"tuangou";

MKAnnotationView*annoView= [mapViewdequeueReusableAnnotationViewWithIdentifier:ID];

if(annoView==nil) {

annoView= [[MKAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:ID];

annoView.canShowCallout=YES;

}

//傳遞模型數(shù)據(jù)

annoView.annotation= annotation;

//設(shè)置圖片

MJTuangouAnnotation*tuangouAnnotation= annotation;

annoView.image= [UIImageimageNamed:tuangouAnnotation.icon];

returnannoView;

}

MKAnnotationView

地圖上的大頭針控件是MKAnnotationView

MKAnnotationView的屬性

@property(nonatomic,strong)id annotation;

大頭針模型

@property(nonatomic,strong)UIImage*image;

顯示的圖片

@property(nonatomic)BOOLcanShowCallout;

是否顯示標(biāo)注

@property(nonatomic)CGPointcalloutOffset;

標(biāo)注的偏移量

@property(strong,nonatomic)UIView*rightCalloutAccessoryView;

標(biāo)注右邊顯示什么控件

@property(strong,nonatomic)UIView*leftCalloutAccessoryView;

標(biāo)注左邊顯示什么控件

MKPinAnnotationView是MKAnnotationView的子類

MKPinAnnotationView比MKAnnotationView多了2個(gè)屬性

@property(nonatomic)MKPinAnnotationColorpinColor;

大頭針顏色

@property(nonatomic)BOOLanimatesDrop;

大頭針第一次顯示時(shí)是否從天而降

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拐纱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哥倔,更是在濱河造成了極大的恐慌戳玫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件未斑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡币绩,警方通過(guò)查閱死者的電腦和手機(jī)蜡秽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缆镣,“玉大人芽突,你說(shuō)我怎么就攤上這事《埃” “怎么了寞蚌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)钠糊。 經(jīng)常有香客問(wèn)我挟秤,道長(zhǎng),這世上最難降的妖魔是什么抄伍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任艘刚,我火速辦了婚禮,結(jié)果婚禮上截珍,老公的妹妹穿的比我還像新娘攀甚。我一直安慰自己,他們只是感情好岗喉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布秋度。 她就那樣靜靜地躺著,像睡著了一般钱床。 火紅的嫁衣襯著肌膚如雪荚斯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天诞丽,我揣著相機(jī)與錄音鲸拥,去河邊找鬼。 笑死僧免,一個(gè)胖子當(dāng)著我的面吹牛刑赶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懂衩,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼撞叨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼金踪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起牵敷,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胡岔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后枷餐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體靶瘸,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年毛肋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怨咪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡润匙,死狀恐怖诗眨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情孕讳,我是刑警寧澤匠楚,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站厂财,受9級(jí)特大地震影響芋簿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜璃饱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一益咬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帜平,春花似錦幽告、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嗤栓,卻和暖如春冻河,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茉帅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工叨叙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堪澎。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓擂错,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親樱蛤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钮呀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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