iOS Swift Google Maps SDK показывает маркеры на определенном уровне масштабирования? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть маркеры на моей карте Google, и я хочу анимировать их, чтобы они не были скрыты после того, как пользователь увеличил масштаб до определенного уровня на карте, а затем, когда пользователь уменьшил масштаб, маркер снова скрылся.

Аналогичные функциональные возможности можно увидеть в SnapMap Snapchat.

Как это поведение достижимо?

В методе делегата карты Google didChangeposition я могу получить текущий уровень масштабирования, но как я могу анимировать входящие и исходящие маркеры? Я не вижу способа получить доступ к массиву маркеров, которые в данный момент отображаются.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вы можете использовать делегата "didchange" из googlemaps. как пример:

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
    if mapView.camera.zoom >= 16 {
         // ADD YOUR MARKERS HERE
    } else {
        mapView.clear()
    }
}

Если вы хотите добавить анимацию, это работает для меня

func addMarker() {
        self.markerArray.removeAll()

        for data in yourDataArray {
            let iconView = UIImageView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
            iconView.image = UIImage(named: "YOUR_IMAGE")
            iconView.contentMode = .scaleAspectFit

            // Creates a marker in the center of the map.
            let marker = GMSMarker()
            marker.position = CLLocationCoordinate2D(latitude: data.lat, longitude: data.lng)
            marker.iconView = iconView
            marker.tracksViewChanges = true
            marker.map = mapView

            self.markerArray.append(marker)

            UIView.animate(withDuration: 0.7,
                       animations: {
                  marker.iconView?.frame = CGRect(x: 0, y: 0, width: 29.0, height: 34.0)
            }, completion: nil)
        }
}

func removeMarker() {
        for marker in self.markerArray {
            UIView.animate(withDuration: 0.3,
                           animations: {
                   marker.iconView?.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
            }, completion: nil)
        }

        self.mapView.clear()
        self.markerArray.removeAll()
}
0 голосов
/ 04 июля 2018

Вот как я это сделал, используя стандартный MapKit в Swift:

/**
     Tells the mapview delegate the mapview visible region was changed. The window size is checked then
     the correct icon size is displayed on the map.
     - parameter mapView: The map view whose visible region changed.
     - parameter animated: If true, the change to the new region was animated.
     */
    func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {

        let zoomWidth = mapView.visibleMapRect.size.width
        //print(zoomWidth)
        if Int(zoomWidth) < 15000  {
            self.mapView.addAnnotations(self.stopArr)
            imageZoom = imageArr[1]! //32px
        } else if Int(zoomWidth) >= 15000 && Int(zoomWidth) < 20000 {
            imageZoom = imageArr[0]! //16px
            self.mapView.addAnnotations(self.stopArr)
        } else {
            imageZoom = imageArr[0]! //16px
            self.mapView.removeAnnotations(self.stopArr)
        }
    }

stopArr - это свойство типа Array, содержащее мои аннотации. Вероятно, что-то подобное есть в Google SDK. Глядя на эту страницу: https://developers.google.com/maps/documentation/ios-sdk/events. Может быть, mapView:didChangeCameraPosition: это делает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...