干熟妇在线视频午夜剧场一级A级|99成人香视频日本两性激情视频|久久 午夜福利无码精品人妻一区|热久久超碰精品精品少妇一区二区|五月天综合在线国产一区免费视频|亚洲成人中心热re久久99|亚洲国产怡红院丁香五月综合h|玖玖九久久久午夜射精视频

十二年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號 掃一掃關(guān)注
小程序
tel-icon全國服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
掃一掃打開百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

使用IOS蘋果地圖添加標注之觸發(fā)添加動作

百恒網(wǎng)絡(luò) 2017-09-18 6980

如果要實現(xiàn)在地圖視圖上添加標注點,需要兩個步驟才能實現(xiàn),第一步是觸發(fā)添加動作,第二步是實現(xiàn)地圖委托方法 mapView:viewForAnnotation:。今天南昌APP制作開發(fā)公司-百恒網(wǎng)絡(luò)小編先為大家介紹第一步:使用IOS蘋果地圖添加標注之觸發(fā)添加動作,具體操作如下:

我們通過“查詢”按鈕觸發(fā)添加標注動作,相關(guān)代碼如下:

@IBAction func geocodeQuery(sender: AnyObject) {

if (self.txtQueryKey.text == nil) {

return

}

var geocoder = CLGeocoder()

geocoder.geocodeAddressString(self.txtQueryKey.text,

completionHandler: { (placemarks, error) -> Void in

if placemarks.count > 0 {

self.mapView.removeAnnotations(self.mapView.annotations) ①

}

for item in placemarks {

NSLog("查詢記錄數(shù):%i", placemarks.count)

let placemark = item as CLPlacemark

//調(diào)整地圖位置和縮放比例

let viewRegion = MKCoordinateRegionMakeWithDistance(

placemark.location.coordinate, 10000, 10000) ②

self.mapView.setRegion(viewRegion, animated: true) ③

let annotation = MyAnnotation(coordinate: placemark.location.coordinate) ④

annotation.city = placemark.locality

annotation.state = placemark.administrativeArea

annotation.streetAddress = placemark.thoroughfare

annotation.zip = placemark.postalCode ⑤

self.mapView.addAnnotation(annotation) ⑥

}

//關(guān)閉鍵盤

self.txtQueryKey.resignFirstResponder()

})

}

- (IBAction)geocodeQuery:(id)sender {

if (_txtQueryKey.text == nil || [_txtQueryKey.text length] == 0) {

return;

}

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:_txtQueryKey.text

completionHandler:^(NSArray *placemarks, NSError *error) {

NSLog(@"查詢記錄數(shù):%lu",[placemarks count]);

if ([placemarks count] > 0) {

[self.mapView removeAnnotations:self.mapView.annotations]; ①

}

for (int i = 0; i < [placemarks count]; i++) {

CLPlacemark* placemark = placemarks[i];

//調(diào)整地圖位置和縮放比例

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(

placemark.location.coordinate, 10000, 10000); ②

[self.mapView setRegion:viewRegion animated:YES]; ③

MyAnnotation *annotation = [[MyAnnotation alloc] init]; ④

annotation.streetAddress = placemark.thoroughfare;

annotation.city = placemark.locality;

annotation.state = placemark.administrativeArea;

annotation.zip = placemark.postalCode;

annotation.coordinate = placemark.location.coordinate; ⑤

[self.mapView addAnnotation:annotation]; ⑥

}

//關(guān)閉鍵盤

[_txtQueryKey resignFirstResponder];

}];

}

當用戶點擊“查詢”按鈕時,開始進行地理信息編碼,如果編碼成功,則調(diào)用completionHandler方法。第①行代碼用于移除目前地圖上所有的標注點,否則反復(fù)點擊“查詢”按鈕,你會發(fā)現(xiàn)地圖上的標注點越來越多。

第②行代碼使用MKCoordinateRegionMakeWithDistance函數(shù)創(chuàng)建一個結(jié)構(gòu)體MKCoordinateRegion,該結(jié)構(gòu)體封裝了一個地圖區(qū)域,其定義如下:

struct MKCoordinateRegion {

var center: CLLocationCoordinate2D //中心點

var span: MKCoordinateSpan //跨度

}

typedef struct {

CLLocationCoordinate2D center; //中心點

MKCoordinateSpan span; //跨度

} MKCoordinateRegion;

在上述代碼中,成員center定義了區(qū)域中心點,它是CLLocationCoordinate2D結(jié)構(gòu)體類型。span成員定義了區(qū)域的跨度,它是MKCoordinateSpan結(jié)構(gòu)體類型。MKCoordinateSpan結(jié)構(gòu)體封裝了在地圖上的跨度信息,它的定 義如下:

struct MKCoordinateSpan {

var latitudeDelta: CLLocationDegrees //區(qū)域的南北跨度

var longitudeDelta: CLLocationDegrees //區(qū)域的東西跨度

}

typedef struct {

CLLocationDegrees latitudeDelta; //區(qū)域的南北跨度

CLLocationDegrees longitudeDelta; //區(qū)域的東西跨度

} MKCoordinateSpan;

在上述代碼中,latitudeDelta為南北跨度,它的單位是“度”,1度大約是111公里。longitudeDelta為東西 跨度,在赤道上1度大約是111公里,隨著靠近兩極,這個距離逐步變小,在地球的兩個極點時變?yōu)?公里。它們 是有差別的,這源于我們地球經(jīng)線和緯線的中心點不同。

在第②行代碼中,MKCoordinateRegionMakeWithDistance函數(shù)的第一個參數(shù)是CLLocationCoordinate2D結(jié)構(gòu), 指定了目標區(qū)域的中心點;第二個參數(shù)是目標區(qū)域南北的跨度,其單位是米;第三個參數(shù)是目標區(qū)域東西的跨度,其單位是米。后面兩個參數(shù)的調(diào)整會影響地圖縮放。

第③行代碼重新設(shè)置地圖視圖的顯示區(qū)域。animated設(shè)置為true(或YES)時,會使地圖有“飛”過去的動 畫效果。

第④行代碼用于實例化MyAnnotation對象。MyAnnotation類是我們自定義的實現(xiàn)MKAnnotation協(xié)議的地圖標注 點類。因為地圖上的標注點是MKPinAnnotationView(大頭針標注視圖)類型,這個視圖要求標注點信息由實現(xiàn) MKAnnotation協(xié)議的類提供。如果標識點上顯示的信息是固定的,可以使用Map Kit API實現(xiàn)MKPointAnnotation 標注類。第④~⑤行代碼將地標CLPlacemark對象信息取出,放入到MapLocation對象中。為什么要這樣導(dǎo)來導(dǎo)去呢? 這是因為在MKPinAnnotationView視圖中,只能接收實現(xiàn)MKAnnotation協(xié)議的類,而地標類CLPlacemark沒有實現(xiàn) MKAnnotation協(xié)議。

第⑥行代碼把標注點MyAnnotation對象添加到地圖視圖上。一旦該方法被調(diào)用,地圖視圖委托方法mapView: viewForAnnotation:就會被回調(diào)。

以上就是百恒網(wǎng)絡(luò)為大家介紹的關(guān)于在南昌APP開發(fā)中使用IOS蘋果地圖添加標注時觸發(fā)添加動作的方法,大家可以先了解一下,后面本公司還會為大家介紹添加標注的第二步,那就是實現(xiàn)地圖委托方法 mapView:viewForAnnotation:,希望對大家有所幫助!

400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
掃一掃打開百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×