將地圖添加到iOS應(yīng)用程序是一個廣泛傳播的功能认然。地圖使移動應(yīng)用更具互動性妓布,并極大地改善了用戶體驗堡掏。在這個MapKit教程中,我們描述了使用MapKit的經(jīng)驗吕座,以幫助您學習如何在Swift中將地圖添加到您的iOS應(yīng)用程序虐译。
1.簡介
您是否曾想在手機應(yīng)用程序中構(gòu)建地圖?這項任務(wù)似乎太難了嗎吴趴?如果是這樣漆诽,那么這篇文章適合你。今天锣枝,我們將討論MapKit厢拭。
那么,MapKit究竟是什么惊橱?它是一個基于Apple Maps的數(shù)據(jù)和API構(gòu)建的有用框架蚪腐,可幫助iOS開發(fā)人員在iPhone應(yīng)用程序中輕松顯示地圖。
我們需要注意的MapKit最重要的特性是MKMapView類 - UIView的子類税朴。此類具有所需的所有功能回季,例如地圖家制,衛(wèi)星甚至當前位置∨菀唬可以在屏幕上使用手勢來改變地理區(qū)域颤殴。真是太棒了吧?鼻忠!但這還不是全部涵但。
我們還可以在地圖上添加注釋,照片帖蔓,標題和標記特定位置矮瘟。另一個好處是我們可以通過MKMapViewDelegate協(xié)議接收通知,例如更改用戶的當前位置或地圖的區(qū)域塑娇。今天澈侠,我們將學習如何做到這一點。現(xiàn)在埋酬,讓我們開始使用這個廣泛的MapKit教程哨啃。
2.權(quán)限和當前位置
通常,我們會為您準備一個入門項目写妥。但是談?wù)撍⒉欢嗳颍晕覀儗嶋H上會從頭到尾編寫代碼。希望這將是讀者追隨的另一個激勵因素珍特。
第1步:將Map Kit視圖從庫拖到屏幕祝峻。
通過使用Interface Builder,將Map Kit View對象拖到故事板上次坡。為簡單起見呼猪,您可以將其固定在屏幕的邊緣(或安全區(qū)域(如果您參考此處))(當然,通過使用自動布局約束)砸琅。
第2步:在View Controller中創(chuàng)建一個管理MapKitView的IBOutlet
接下來我們需要做的是將IBOutlet連接從屏幕上的Map Kit視圖拖到UIViewController。不要忘記導入MapKit庫轴踱,以便代碼成功編譯症脂。
BOOM,它看起來很棒淫僻,對吧诱篷?MapKit為我們提供了地圖,現(xiàn)在我們需要做的就是觀察和處理不同的事件雳灵,例如更改當前位置或地區(qū)等棕所。
然而,在完成所有這些之前悯辙,我們首先需要做一件重要的事情:我們必須獲得訪問用戶位置的權(quán)限琳省。當然迎吵,如果你不這樣做,你的應(yīng)用程序仍然有效针贬,地圖仍然正常顯示击费。但您必須這樣做,因為位置信息是屬于用戶的私人信息之一桦他。我們必須在獲得之前詢問他們的權(quán)限蔫巩。如果您未能首先獲得權(quán)限,則可能會導致應(yīng)用程序崩潰快压。
在Info.plist文件中圆仔,我們添加了一個像這樣的新項:
在描述部分中,您必須向用戶解釋您需要其權(quán)限的原因蔫劣。我們的“用于你的目的”(讓我們試著說一些說服他們接受的東西)荧缘。
第3步:檢查位置服務(wù)。
首先拦宣,我們將創(chuàng)建一個名為locationManager的變量:
let locationManager = CLLocationManager()
然后截粗,在viewDidLoad()中,我們有:
if CLLocationManager.locationServicesEnabled(){ //繼續(xù)在這里實施 } else { //做一些讓用戶知道為什么需要打開它的東西鸵隧。 }
該locationServicesEnabled功能用于檢查用戶是否已接通他們的位置服務(wù)或不(在所示設(shè)置在iPhone)绸罗。如果有,我們可以繼續(xù)實施我們的代碼豆瘫。否則珊蟀,我們需要做一些事情讓用戶知道他們?yōu)槭裁葱枰蜷_它(比如發(fā)送彈出窗口來通知用戶)。
第4步:檢查位置授權(quán)狀態(tài)
為此外驱,我們將創(chuàng)建一個函數(shù)育灸,例如:
func checkAuthorizationStatus(){ switch CLLocationManager.authorizationStatus(){
case.authorizedWhenInUse:break
case.denied:break
case .notDetermined:break
case .restricted:break
case.authorizedAlways:break
}
}
我們創(chuàng)建了一個名為checkAuthorizationStatus()的函數(shù),基本上它將檢查授權(quán)狀態(tài)是什么昵宇。我們需要處理五種情況:
- authorizedWhenInUse:應(yīng)用程序被授權(quán)獲取用戶位置的唯一時間是應(yīng)用程序打開時磅崭。
- authorizedAlways:這意味著應(yīng)用程序可以隨時在后臺獲取您的位置。這是地圖應(yīng)用程序瓦哎,這個應(yīng)用程序總是需要你的位置砸喻,當你在某個地方獲得方向或你走動。
- notDetermined:第一次彈出顯示時蒋譬,他們沒有選擇允許或不允許割岛,所以這取決于你需要相應(yīng)處理的項目。
對于剩下的兩個案例犯助,您需要根據(jù)具體情況向用戶發(fā)送通知癣漆,例如用戶未授予顯示其位置的權(quán)限。在本文中剂买,我們不會關(guān)注這些情況惠爽,但是癌蓖,當您處理實際項目時,您還需要處理這些情況疆股。它們和前兩個一樣重要
在本文中费坊,出于教育目的,我們只處理第一種情況(authorizedWhenInUse)旬痹。所以附井,繼續(xù) - 我們將編寫這行Swift代碼:
mapView.showsUserLocation = true
此代碼將顯示用戶的當前位置×讲校總之永毅,所有代碼行如下所示:</pre>
override func viewDidLoad(){
super.viewDidLoad()
checkLocationServices()
}
func checkLocationServices(){
if CLLocationManager.locationServicesEnabled(){ checkLocationAuthorization()
} else {
//顯示警告,讓用戶知道他們必須打開它人弓。
}}
func checkLocationAuthorization(){
switch CLLocationManager.authorizationStatus(){
case.authorizedWhenInUse:
mapView.showsUserLocation = true
case .denied://顯示警告告訴用戶如何打開權(quán)限 break case .notDetermined: locationManager.requestWhenInUseAuthorization()
mapView.showsUserLocation = true
case .restricted://顯示警告沼死,讓他們知道發(fā)生了什么 break case.authorizedAlways: break
}
}
現(xiàn)在,讓我們構(gòu)建并再次運行Xcode項目崔赌。BOOM意蛀,它顯示了當前的位置。請記住健芭,您可以模擬iOS模擬器中的任何位置县钥。
所以,你現(xiàn)在怎么想慈迈?這真的很酷若贮,對吧?痒留!只需少量代碼就可以獲得很多功能谴麦。但是,這甚至都不是全部伸头。在下一節(jié)中匾效,我們將向您展示MapKit的一個有趣功能,我們相信您會非常喜歡它熊锭。那是在地圖上顯示任意位置列表弧轧。完全理解MapKit教程后,您將能夠構(gòu)建自己的Store Locator應(yīng)用程序碗殷。
3.在地圖上顯示地點列表
讓我們構(gòu)建一個功能,在地圖上顯示體育場列表速缨。以下是我們?nèi)绾卧赟wift中快速實現(xiàn)這一目標锌妻。
第1步:創(chuàng)建Model對象
讓我們?yōu)?strong>體育場創(chuàng)建一個模型對象。
struct Stadium {
var name:String
var lattitude:CLLocationDegrees
var longtitude:CLLocationDegrees
}
接下來旬牲,讓我們在viewDidLoad()中創(chuàng)建一個英格蘭體育場的硬編碼列表仿粹。這些是我們想要在地圖上繪制的體育場:
</pre>
let stadiums = [Stadium(name: “Emirates Stadium”, lattitude: 51.5549, longtitude: -0.108436),
Stadium(name: “Stamford Bridge”, lattitude: 51.4816, longtitude: -0.191034),
Stadium(name: “White Hart Lane”, lattitude: 51.6033, longtitude: -0.065684),
Stadium(name: “Olympic Stadium”, lattitude: 51.5383, longtitude: -0.016587),
Stadium(name: “Old Trafford”, lattitude: 53.4631, longtitude: -2.29139),
Stadium(name: “Anfield”, lattitude: 53.4308, longtitude: -2.96096)]
第2步:將體育場添加到地圖中搁吓。
這在Swift中非常容易。MapKit可以在地圖上添加地點吭历,例如微風:
func fetchStadiumsOnMap(_ stadiums: [Stadium]) {
for stadium in stadiums {
let annotations = MKPointAnnotation()
annotations.title = stadium.name
annotations.coordinate = CLLocationCoordinate2D(latitude:
stadium.lattitude, longitude: stadium.longtitude)
mapView.addAnnotation(annotations)
}
}
它看起來很簡單堕仔,對吧?對于列表中的每個體育場晌区,我們創(chuàng)建了一個MKPointAnnotation實例摩骨。該MKPointAnnotation類可以幫助我們創(chuàng)建綁在地圖上指定點的對象。接下來朗若,我們將體育場的名稱和坐標分配給該對象恼五。之后,我們將其添加到地圖視圖中哭懈。
完成所有操作后灾馒,我們在viewDidLoad中調(diào)用此函數(shù),其中包含已創(chuàng)建的體育場列表遣总。讓我們運行并構(gòu)建Xcode項目:
override func viewDidLoad() {
super.viewDidLoad()
checkLocationServices()
fetchStadiumsOnMap(stadiums)
}
作為旁注睬罗,例如,如果您的地方離英格蘭很遠旭斥,則無法在手機上看到這些地方容达。因此,您需要放大地圖琉预,然后滑到英格蘭董饰。然后你會看到像這樣的精確點:
4.總結(jié)
本文基本上指導您如何創(chuàng)建地圖,詢問用戶訪問其位置的權(quán)限圆米,并使用MKMapView顯示當前的地理位置卒暂。它還向您展示了如何在地圖上提取地點列表。
我們希望通過本文娄帖,您現(xiàn)在有信心創(chuàng)建一個簡單的地圖也祠,并將更多功能集成到您的移動應(yīng)用程序中。我們希望你會喜歡這篇文章近速。這是完整的Swift源代碼诈嘿。請分享這篇文章,以幫助我們通過這個非常棒的MapKit教程吸引更多開發(fā)人員削葱〗毖牵快樂的編碼!