十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

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

      百恒網絡 2017-09-18 7249

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

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

      @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("查詢記錄數:%i", placemarks.count)

      let placemark = item as CLPlacemark

      //調整地圖位置和縮放比例

      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) ⑥

      }

      //關閉鍵盤

      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(@"查詢記錄數:%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];

      //調整地圖位置和縮放比例

      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]; ⑥

      }

      //關閉鍵盤

      [_txtQueryKey resignFirstResponder];

      }];

      }

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

      第②行代碼使用MKCoordinateRegionMakeWithDistance函數創建一個結構體MKCoordinateRegion,該結構體封裝了一個地圖區域,其定義如下:

      struct MKCoordinateRegion {

      var center: CLLocationCoordinate2D //中心點

      var span: MKCoordinateSpan //跨度

      }

      typedef struct {

      CLLocationCoordinate2D center; //中心點

      MKCoordinateSpan span; //跨度

      } MKCoordinateRegion;

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

      struct MKCoordinateSpan {

      var latitudeDelta: CLLocationDegrees //區域的南北跨度

      var longitudeDelta: CLLocationDegrees //區域的東西跨度

      }

      typedef struct {

      CLLocationDegrees latitudeDelta; //區域的南北跨度

      CLLocationDegrees longitudeDelta; //區域的東西跨度

      } MKCoordinateSpan;

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

      在第②行代碼中,MKCoordinateRegionMakeWithDistance函數的第一個參數是CLLocationCoordinate2D結構, 指定了目標區域的中心點;第二個參數是目標區域南北的跨度,其單位是米;第三個參數是目標區域東西的跨度,其單位是米。后面兩個參數的調整會影響地圖縮放。

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

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

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

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

      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

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

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      国产小呦泬泬99精品| 亚洲AV无码成人精品区日韩| 99热精品在线观看| 国产成人久久精品麻豆一区| 国产愉拍精品视频手机| 2017国产精品自拍| 91精品国产自产在线观看永久∴| 亚洲AV永久无码精品一百度影院| 国产一区二区精品尤物| 中文字幕久热精品视频在线| 国产午夜精品理论片久久| 国产vA免费精品高清在线观看 | 免费观看国产精品| 国产精品久久久久久久福利院 | 亚洲精品无码专区久久久| 中日韩产精品1卡二卡三卡| 久久国产精品波多野结衣AV| 亚洲精品网站在线观看不卡无广告 | 国产中的精品一区的| 日韩成人国产精品视频| 无码人妻精品一区二区三区久久久| 国色精品卡一卡2卡3卡4卡免费| 思思re热免费精品视频66| 九九精品久久久久久噜噜| 无码人妻精品一区二区三区蜜桃| 精品亚洲AV无码一区二区| 国产精品久久影院| 亚欧在线精品免费观看一区| 国产精品免费观看| 色哟哟精品视频在线观看| 精品久久久久久久久亚洲偷窥女厕| 精品免费国产一区二区三区| 国产精品特级露脸AV毛片| 国产伦精品一区二区三区无广告| 国产成人综合色视频精品| 日韩精品在线观看视频| 在线观看日韩一区| 大伊香蕉精品视频在线导航| 亚洲午夜精品第一区二区8050| 国产精品亚洲二区在线观看| 国自产精品手机在线观看视频|