Compartir a través de


Interacción con el mapa en el SDK de iOS (versión preliminar)

En este artículo se muestra cómo usar el administrador de eventos de mapa.

Nota:

Retirada del SDK de Azure Maps para iOS

El SDK nativo de Azure Maps para iOS ya está en desuso y se retirará el 31 de marzo de 2025. Para evitar interrupciones del servicio, migre al SDK web de Azure Maps antes del 31 de marzo de 2025. Para más información, vea la Guía de migración del SDK de Azure Maps para iOS.

Interacción con el mapa

El mapa administra todos los eventos a través de la propiedad events que acepta delegados, que se ajustan al protocolo AzureMapDelegate. En la tabla siguiente se enumeran todos los eventos de mapa admitidos representados como métodos del protocolo AzureMapDelegate.

Método Descripción
azureMapCameraIsIdle(_ map: AzureMap)

Se inicia después del último fotograma representado antes de que el mapa entre en un estado "inactivo":

  • No hay transiciones de cámara en curso.
  • Todos los elementos solicitados actualmente se han cargado.
  • Todas las animaciones de fundido y transición se han completado.

azureMapCameraIsMoving(_ map: AzureMap) Se inicia repetidamente durante una transición animada de una vista a otra. Esto puede ser el resultado de la interacción del usuario o de los métodos.
azureMapCameraMoveWasCanceled(_ map: AzureMap) Se inicia al cancelar una solicitud de movimiento a la cámara.
azureMap(_ map: AzureMap, cameraMoveIsStarted reason: CameraChangeReason) Se inicia justo antes de que el mapa comience a realizar la transición de una vista a otra. Esto puede ocurrir mediante programación o como resultado de la interacción del usuario. El parámetro reason es un conjunto de opciones que proporciona detalles de cómo se inició el movimiento de la cámara. A continuación, se muestra la lista de posibles motivos:
  • Desconocido
  • Programático
  • Restablecimiento del norte
  • Gesto de movimiento de la panorámica
  • Gesto de acercar
  • Gesto de rotación
  • Gesto de zoom para acercar
  • Gesto de zoom para alejar
  • Gesto de zoom con un dedo
  • Gesto de inclinación
  • Transición cancelada
azureMap(_ map: AzureMap, didTapAt location: CLLocationCoordinate2D) Se inicia cuando el mapa se presiona y se libera en el mismo punto del mapa.
azureMap(_ map: AzureMap, didTapOn features: [Feature]) Se inicia cuando el mapa se presiona y se libera en el mismo punto de una característica.
azureMap(_ map: AzureMap, didAddLayer layer: Layer) Se inicia cuando se agrega una capa al mapa.
azureMap(_ map: AzureMap, didRemoveLayer layer: Layer) Se inicia cuando se quita una capa del mapa.
azureMapWillLoad(_ map: AzureMap) Se inicia antes de descargar los recursos necesarios para la representación.
azureMapDidLoad(_ map: AzureMap) Se inicia después de descargar los recursos y se completa la primera representación visual del mapa.
azureMap(_ map: AzureMap, didLongPressAt location: CLLocationCoordinate2D) Se inicia cuando el mapa se presiona, se mantiene durante un momento y, a continuación, se libera en el mismo punto del mapa.
azureMap(_ map: AzureMap, didLongPressOn features: [Feature]) Se inicia cuando el mapa se presiona, se mantiene durante un momento y, a continuación, se libera en el mismo punto de una característica.
azureMapIsReady(_ map: AzureMap) Se inicia siempre que se cumplan las condiciones siguientes:
  • El mapa se carga inicialmente
  • Cambios de orientación de la aplicación
  • Los recursos de asignación mínimos necesarios terminan de cargarse
  • El mapa está listo para interactuar mediante programación.
azureMap(_ map: AzureMap, didAddSource source: Source) Se inicia cuando se agrega DataSource o VectorTileSource al mapa.
azureMap(_ map: AzureMap, didRemoveSource source: Source) Se inicia cuando se quita DataSource o VectorTileSource del mapa.
azureMapStyleDidChange(_ map: AzureMap) Se inicia cuando se carga o cambia el estilo del mapa.

En el siguiente código se muestra cómo agregar los eventos azureMap(_ map: AzureMap, didTapAt location: CLLocationCoordinate2D), azureMap(_ map: AzureMap, didTapOn features: [Feature]) y azureMapCameraIsMoving(_ map: AzureMap) al mapa.

class ShowSimpleEventsHandlingViewController: UIViewController, AzureMapDelegate {

    // Other Setup...

    func setupMapControl() {
        mapControl.onReady { map in

            // Add the delegate to the map to respond to events.
            map.events.addDelegate(self)
        }
    }

    func azureMap(_ map: AzureMap, didTapAt location: CLLocationCoordinate2D) {
        // Map clicked.
    }

    func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
        // Feature clicked.
    }

    func azureMapCameraIsMoving(_ map: AzureMap) {
        // Map camera moved.
    }
}

Para obtener más información, consulte el artículo Navegación por el mapa para saber cómo interactuar con el mapa y desencadenar eventos.

Delimitación de los eventos de características a una capa

Al agregar un delegado al mapa, los id. de capa se pueden pasar como un segundo parámetro. Cuando se pasen las capas, el evento solo se activará si se produce en esa capa. Los eventos que se limitan a determinadas capas se admiten en las capas de símbolos, burbujas, líneas y polígonos.

class ShowScopedEventsHandlingViewController: UIViewController, AzureMapDelegate {
    
    // Other Setup...

    func setupMapControl() {
        mapControl.onReady { map in

            // Create a data source.
            let source = DataSource()
            map.sources.add(source)

            // Add data to the data source.
            source.add(geometry: Point(CLLocationCoordinate2D(latitude: 0, longitude: 0)))

            // Create a layer and add it to the map.
            let layer = BubbleLayer(source: source)
            map.layers.addLayer(layer)

            // Add the delegate to the map to respond to events.
            map.events.addDelegate(self, for: [layer.id])
        }
    }

    func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
        // One or more features tapped.
    }

    func azureMap(_ map: AzureMap, didLongPressOn features: [Feature]) {
        // One or more features long pressed.
    }
}

Información adicional

Consulte los siguientes artículos para obtener ejemplos de código completo: