iOS開發(fā)之地圖搜索列表顯示效果實現(xiàn)

實現(xiàn)效果

如圖:


image.png

需要引入 高德3D地圖SDK,高德搜索SDK歉闰,高德地圖基礎SDK辖众,需配置自己的高德地圖AppKey和對應的Boundle id。

項目demo是用pod集成的和敬,demo組織架構使用了MVC設計模式凹炸。自己封裝了高德地圖搜索管理類,拿去直接能用昼弟,用法也很簡單啤它,關于這個搜索的封裝,說明在http://www.reibang.com/p/d5a2ace2252d舱痘,里面含gitHub地址变骡。

框架結構

image.png

AddressSelectedController是地址搜索的界面,DDLocationReGeocode作為其Model模型芭逝,DDMapView是對地圖進行的一個抽離塌碌,整體采用MVC設計模式。其中DDSearchManager文件中是封裝好的搜索管理類旬盯。

各個部分的職能很明確台妆,這樣子寫代碼你會發(fā)現(xiàn)很簡單,看起來也不復雜胖翰,當然你如果非要在一個Controller里面即地圖又有搜索等等频丘,也行Who cares。

實現(xiàn)過程

AddressSelectedController.h
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "DDLocationReGeocode.h"

/**
 回調選則的位置信息

 @param reGeocode 位置信息
 @param error 錯誤碼
 */
typedef void(^DDLocationCompleteBlock)(DDLocationReGeocode *reGeocode, NSError *error);

@interface AddressSelectedController : UIViewController

//回調選中地址信息的block
@property (nonatomic, copy) DDLocationCompleteBlock completeBlock;

/*
 傳入經(jīng)緯度度泡态,進行反地理編碼
 */
@property (nonatomic) CLLocationCoordinate2D currentCoordinate;

@end

這個界面可以從外傳入初始經(jīng)緯度,如果傳入了初始經(jīng)緯度則迂卢,地圖會直接移動到傳入的位置處并進行附近的興趣點搜索某弦,如果未傳入初始經(jīng)緯度桐汤,則地圖默認定位到用戶當前位置處。

DDLocationCompleteBlock是回調你選中地址信息的block靶壮,block里面回調了DDLocationReGeocode的對象reGeocode和NSError的錯誤碼怔毛,這里錯誤碼沒有定義,如有需要自己添加腾降。

當然也可以使用代理進行數(shù)據(jù)回調也是可以的拣度,都很好。

AddressSelectedController.m

實現(xiàn)文件中添加了地圖螃壤,tableView抗果,實現(xiàn)了各自的代理方法。移動地圖時進行逆地理編碼查詢POI點奸晴,取到興趣點后刷新列表冤馏。

DDLocationReGeocode.h

這個model里很簡單就是一些數(shù)據(jù),在MVC中Model的作用還是挺大的寄啼,這里沒能全部體現(xiàn)出來逮光,只是淡單純的儲存了一下數(shù)據(jù),作為數(shù)據(jù)傳輸?shù)闹黧w墩划。

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface DDLocationReGeocode : NSObject

@property (nonatomic, copy) NSString *city;

@property (nonatomic, copy) NSString *cityCode;

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *address;

@property (nonatomic      ) CLLocationCoordinate2D coordinate;

@end
DDMapView.h

這個DDMapView里面也很簡單就一個地圖涕刚,中間放了一個圖片。對于地圖的封裝有些人用一個Manager作為地圖的管理類來管理地圖乙帮,我這里直接用了一個View杜漠,上面加載了一個地圖來處理的,都能實現(xiàn)蚣旱,不知道哪個方式好碑幅,大家可以自己去試試。

#import <UIKit/UIKit.h>
#import <MAMapKit/MAMapKit.h>
@class DDMapView;

@protocol DDMapViewDelegate <NSObject>

//滑動地圖先執(zhí)行1塞绿,再執(zhí)行2

@optional
/**
 1沟涨、地圖區(qū)域改變完成后會調用此接口(多次調用)

 @param ddMapView self
 @param animated 是否動畫
 */
- (void)ddMapView:(DDMapView *)ddMapView regionDidChangeAnimated:(BOOL)animated;

/**
 2、地圖移動結束調用此接口(多次調用)

 @param ddMapView self
 @param wasUserAction 是否用戶操作的滑動行為
 */
- (void)ddMapView:(DDMapView *)ddMapView mapDidMoveByUser:(BOOL)wasUserAction;

@end


@interface DDMapView : UIView
{
    CLLocationCoordinate2D _centerCoordinate;//當前地圖的中心點經(jīng)緯度
}

@property (nonatomic, weak) id <DDMapViewDelegate> delegate;
//高德地圖
@property (nonatomic, strong) MAMapView *mapView;
//用戶當前位置
@property (nonatomic) CLLocationCoordinate2D userCoordinate;


- (instancetype)initWithFrame:(CGRect)frame delegate:(id<DDMapViewDelegate>)delegate;

/**
 設置地圖中心點的坐標

 @param centerCoordinate 經(jīng)緯度坐標
 @param animated 是否有動畫
 */
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate animated:(BOOL)animated;
/**
 獲取地圖中心點的坐標

 @return 經(jīng)緯度坐標
 */
- (CLLocationCoordinate2D)centerCoordinate;

@end

這里特別說明一下為什么我將_centerCoordinate寫成一個實例變量异吻,又寫了他的set裹赴、get方法,用一個@property不就搞定了嗎诀浪,當然不是這樣的棋返,之所以這樣寫的原因是為了擴展它的set方法,添加一個參數(shù)animated雷猪,原來費這么大驚就為了這個啊睛竣,那還有其他什么的簡便方法嗎,知道的告訴我吧求摇,我們互相學習射沟。

DDMapView.m

實現(xiàn)文件里添加了一個地圖殊者,一個中間的圖片,中間圖片沒做什么動畫之類的验夯,項目需要的話可以自己做猖吴,我看好多地圖會做一個地圖一滑動,這個圖片跳動一下挥转,當然這個也是可以的海蔽,做個簡單的也還是可以的,然后下面再加個什么雷達效果什么的绑谣。

代碼在最后說明里面党窜,下載自己看看,歡迎提出意見域仇,別忘了用之前配置你的AppKey刑然。

最后說明

這只是一個小demo而已,根據(jù)自己項目的實際情況可以自己進行封裝更多功能暇务。我將這個小demo放在這里泼掠,如果有一起學習的可以交流https://github.com/Mexiang/AddressSearchController

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末垦细,一起剝皮案震驚了整個濱河市择镇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌括改,老刑警劉巖腻豌,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘱能,居然都是意外死亡吝梅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門惹骂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苏携,“玉大人,你說我怎么就攤上這事对粪∮叶常” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵著拭,是天一觀的道長纱扭。 經(jīng)常有香客問我,道長儡遮,這世上最難降的妖魔是什么乳蛾? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上屡久,老公的妹妹穿的比我還像新娘忆首。我一直安慰自己,他們只是感情好被环,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著详幽,像睡著了一般筛欢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唇聘,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天版姑,我揣著相機與錄音,去河邊找鬼迟郎。 笑死剥险,一個胖子當著我的面吹牛,可吹牛的內容都是我干的宪肖。 我是一名探鬼主播表制,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼控乾!你這毒婦竟也來了么介?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蜕衡,失蹤者是張志新(化名)和其女友劉穎壤短,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慨仿,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡久脯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镰吆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帘撰。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鼎姊,靈堂內的尸體忽然破棺而出骡和,到底是詐尸還是另有隱情,我是刑警寧澤相寇,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布慰于,位于F島的核電站,受9級特大地震影響唤衫,放射性物質發(fā)生泄漏婆赠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望休里。 院中可真熱鬧蛆挫,春花似錦、人聲如沸妙黍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拭嫁。三九已至可免,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間做粤,已是汗流浹背浇借。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕品,地道東北人妇垢。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像肉康,于是被迫代替她去往敵國和親闯估。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容