2016-06-23 27 views
5

Googleマップ上の住所ラベルに現在の住所を表示するとともに、特定の場所にマーカーを表示しています。iOSでGoogleマップの移動に伴いマーカーを移動するにはどうすればよいですか?

Googleマップを移動して位置を変更したいのですが、地図を移動しているときにマーカーを地図と同時に移動する必要があり、その場所の住所を表示する必要があります住所ラベルに

どうすればいいですか?

私はこれを試してみました:

IOSのための地図SDKで行われた Release Notesから基づい
let destinationMarker = GMSMarker(position: self.destinationLocation.coordinate) 

let image = UIImage(named:"sourcemarker") 
destinationMarker.icon = image 
destinationMarker.draggable = true 
destinationMarker.map = self.viewMap 
//viewMap.selectedMarker = destinationMarker 
destinationMarker.title = "hi" 
destinationMarker.userData = "changedestination" 

func mapView(mapView: GMSMapView, didEndDraggingMarker marker: GMSMarker) 
{ 
    if marker.userData as! String == "changedestination" 
    { 
     self.destinationLocation = CLLocation(latitude: marker.position.latitude, longitude: marker.position.longitude) 
     self.destinationCoordinate = self.destinationLocation.coordinate 
     //getAddressFromLatLong(destinationCoordinate) 
    } 
} 

答えて

8
// UpdteLocationCoordinate 
    func updateLocationoordinates(coordinates:CLLocationCoordinate2D) { 
     if destinationMarker == nil 
     { 
      destinationMarker = GMSMarker() 
      destinationMarker.position = coordinates 
      let image = UIImage(named:"destinationmarker") 
      destinationMarker.icon = image 
      destinationMarker.map = viewMap 
      destinationMarker.appearAnimation = kGMSMarkerAnimationPop 
     } 
     else 
     { 
      CATransaction.begin() 
      CATransaction.setAnimationDuration(1.0) 
      destinationMarker.position = coordinates 
      CATransaction.commit() 
     } 
    } 

    // Camera change Position this methods will call every time 
    func mapView(mapView: GMSMapView, didChangeCameraPosition position: GMSCameraPosition) { 
     let destinationLocation = CLLocation() 
     if self.mapGesture == true 
     { 
      destinationLocation = CLLocation(latitude: position.target.latitude, longitude: position.target.longitude) 
      destinationCoordinate = destinationLocation.coordinate 
      updateLocationoordinates(destinationCoordinate) 
     } 
    } 
1

、マーカーの位置を変更すると、マーカーが新しい場所にアニメーション化します。これを解決するには

は、のようなRelease Version 1.5に述べたように、あなたがGMSMarkerの新機能を使用することがあります。

  • マーカーがドラッグ可能なプロパティを使用してドラッグすることができ、新しいドラッグデリゲートメソッドはGMSMapViewDelegateに追加されました。 (問題4975)
  • マーカー位置と回転のアニメーションをサポートするGMSMarkerのカスタムCALayerサブクラスであるGMSMarkerLayerが追加されました。それに加えて(問題4951号5743)

、GitHubの中にこのポスト - GoogleMapsAnimationGlitch とこのSOポスト - How to smoothly move GMSMarker along coordinates in Objective c も役立つかもしれません。

+0

ありがとうございます@Teyam ...それは動作します... –

+0

@Teyam ..私は小さな疑いがあります。私はGoogleマップを使って作業しています。場所の更新時に、私のマップビューもanimating.Please助けてください。 –

1

ここであなたを助けることができるトリックがあります。ここでGMSMarkerを使用する代わりに、Google MapViewに中心を示す画像を配置します。

あなたは簡単にこれを使用して地図の中心の座標を見つけることができます。

GMSCoordinateBounds *bounds = nil; 
bounds = [[GMSCoordinateBounds alloc] initWithRegion: visibleRegion]; 

CLLocationCoordinate2D centre = CLLocationCoordinate2DMake(
                  (bounds.southWest.latitude + bounds.northEast.latitude)/2, 
                  (bounds.southWest.longitude + bounds.northEast.longitude)/2); 

double latitude = mapView.camera.target.latitude; 
double longitude = mapView.camera.target.longitude; 

それとも、これは今、あなたは、GoogleによってジオコーディングAPIを使って位置アドレスを取得することができます。ここで

は参照です: https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_geocoder

このデリゲートメソッドが呼び出されたときは、アドレスを更新することができます

- (void) mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 

は、この情報がお役に立てば幸いです。

+0

@ Bharat Bachaniに感謝します。 –

1

スウィフト4の更新:あなたはGMSMapViewDelegateに準拠する必要が

まず:

extension MapsVC: GMSMapViewDelegate{ 

をその後のviewDidLoad(中viewMapの代理人として、あなたのVCを設定)

viewMap.delegate = self 

その後、次の方法を使用してカメラからのアップデートを取得する必要があります。 nを設定し、マーカーの新しい位置として設定してください:

関連する問題