Freigeben über


Anzeigen von Featureinformationen im iOS SDK (Vorschau)

Hinweis

Einstellung des Azure Maps iOS SDK

Das Azure Maps Native SDK für iOS ist jetzt veraltet und wird am 31.3.25 eingestellt. Um Dienstunterbrechungen zu vermeiden, migrieren Sie bis zum 31.3.25 zum Azure Maps Web SDK. Weitere Informationen finden Sie unter Anleitung zur Migration des Azure Maps iOS SDK.

Räumliche Daten werden häufig mithilfe von Punkten, Linien und Polygonen dargestellt. Diesen Daten sind häufig Metadateninformationen zugeordnet. Ein Punkt kann beispielsweise den Standort eines Restaurants darstellen, und die Metadaten zu diesem Restaurant können den Namen, die Adresse und die Art des Speisenangebots umfassen. Diese Metadaten können als Eigenschaften eines GeoJSON-Features (Feature) hinzugefügt werden. Der folgende Code erstellt ein einfaches Punktmerkmal mit einer title-Eigenschaft und dem Wert "Hello World!".

// Create a data source and add it to the map.
let source = DataSource()
map.sources.add(source)

// Create a point feature.
let feature = Feature(Point(CLLocationCoordinate2D(latitude: -122.33, longitude: 47.64)))

// Add a property to the feature.
feature.addProperty("title", value: "Hello World!")

// Create a point feature, pass in the metadata properties, and add it to the data source.
source.add(feature: feature)

Weitere Informationen zum Erstellen der Karte und zum Hinzufügen von Daten zur Karte finden Sie unter Erstellen einer Datenquelle.

Wenn ein Benutzer mit einem Merkmal auf der Karte interagiert, kann mithilfe von Ereignissen auf diese Aktionen reagiert werden. Ein gängiges Szenario ist das Anzeigen einer Nachricht, die sich aus den Metadateneigenschaften eines Merkmals zusammensetzt, mit dem der Benutzer interagiert hat. Das Ereignis azureMap(_:didTapOn:) ist das Hauptereignis, das verwendet wird, um zu erkennen, wann der Benutzer auf ein Merkmal auf der Karte getippt hat. Es gibt auch ein Ereignis vom Typ azureMap(_:didLongPressOn:). Wenn der Karte ein Delegat hinzugefügt wird, kann dieser auf eine einzelne Ebene begrenzt werden, indem die ID einer Ebene übergeben wird, auf die er begrenzt werden soll. Wird keine Ebenen-ID übergeben, wird das Ereignis ausgelöst, wenn auf ein beliebiges Merkmal auf der Karte getippt wird (unabhängig von der Ebene, auf der sich das Merkmal befindet). Der folgende Code erstellt eine Symbolebene zum Rendern von Punktdaten auf der Karte. Anschließend wird ein Delegat hinzugefügt, das auf diese Symbolebene beschränkt ist und das azureMap(_:didTapOn:)-Ereignis verarbeitet.

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

// Add the delegate to the map to handle feature tap events on the layer only.
map.events.addDelegate(self, for: [layer.id])
func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
    // Retrieve the title property of the feature as a string.
    let title = features.first?.properties["title"] as? String

    // Do something with the title.
}

Anzeigen einer Warnung

Eine Warnung ist eine der einfachsten Methoden, um Benutzer*innen Informationen anzuzeigen, die in der Regel in allen unterstützten iOS-Versionen zur Verfügung steht. Wenn Sie die Benutzer*innen schnell über etwas informieren möchten, worauf sie getippt haben, ist eine Warnung ggf. eine gute Option. Der folgende Code zeigt, wie eine Warnung mit dem azureMap(_:didTapOn:)-Ereignis verwendet werden kann.

func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
    // Retrieve the title property of the feature as a string.
    let title = features.first?.properties["title"] as? String

    // Display an alert with the title information.
    let alert = UIAlertController(title: title, message: nil, preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .cancel))
    present(alert, animated: true)
}

Animation: Tippen auf ein Merkmal und Anzeigen einer Warnung

Neben Warnungen gibt es aber auch noch verschiedene andere Möglichkeiten, um die Metadateneigenschaften eines Merkmals zu präsentieren:

  • Hinzufügen einer benutzerdefinierten Ansicht über der Karte
  • Hinzufügen eines untergeordneten Ansichtscontrollers über der Karte
  • Modales Darstellen eines anderen Ansichtscontrollers über dem aktuellen
  • Navigieren zu einem anderen Ansichtscontroller

Anzeigen eines Popups

Das Azure Maps iOS SDK bietet eine Popup-Klasse, mit der Anmerkungselemente auf der Benutzeroberfläche, die an einer Position auf der Karte verankert sind, auf einfache Weise erstellt werden können. Für Popups müssen Sie eine Ansicht mit selbstständiger Größenanpassung in der content-Option des Popups übergeben. Das folgende Beispiel zeigt eine einfache Ansicht mit dunklem Text vor weißem Hintergrund.

class PopupTextView: UIView {
    private let textLabel: UILabel = {
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.numberOfLines = 0
        label.textColor = UIColor(red: 34 / 255, green: 34 / 255, blue: 34 / 255, alpha: 1)
        label.font = .systemFont(ofSize: 18)
        return label
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        setup()
    }

    private func setup() {
        backgroundColor = .white
        addSubview(textLabel)

        NSLayoutConstraint.activate([
            textLabel.topAnchor.constraint(equalTo: topAnchor, constant: 10),
            textLabel.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -10),
            textLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10),
            textLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -25)
        ])
    }

    func setText(_ text: String) {
        textLabel.text = text
    }
}

Mit dem folgenden Code wird ein Popup erstellt und der Karte hinzugefügt. Beim Tippen auf ein Feature wird die title-Eigenschaft mit der PopupTextView-Klasse angezeigt, wobei die untere Mitte des Layouts an der angegebenen Position auf der Karte verankert ist.

// Create a popup and add it to the map.
let popup = Popup()
map.popups.add(popup)

// Set popup to the class property to use in events handling later.
self.popup = popup
func azureMap(_ map: AzureMap, didTapOn features: [Feature]) {
    guard let popup = popup, let feature = features.first else {
        // Popup has been released or no features provided
        return
    }

    // Create the custom view for the popup.
    let customView = PopupTextView()

    // Set the text to the custom view.
    let text = feature.properties["title"] as! String
    customView.setText(text)

    // Get the position of the tapped feature.
    let position = Math.positions(from: feature).first!

    // Set the options on the popup.
    popup.setOptions([
        // Set the popups position.
        .position(position),

        // Set the anchor point of the popup content.
        .anchor(.bottom),

        // Set the content of the popup.
        .content(customView)

        // Optionally, hide the close button of the popup.
        // .closeButton(false)

        // Optionally offset the popup by a specified number of points.
        // .pointOffset(CGPoint(x: 10, y: 10))
    ])

    // Open the popup.
    popup.open()
}

Der folgende Screenshot zeigt Popups, die beim Tippen auf Features angezeigt und beim Verschieben der Karte an der angegebenen Position verankert bleiben.

Animation: Angezeigtes Popup, wenn die Karte verschoben wird, während das Popup verankert ist

Zusätzliche Informationen

So fügen Sie Ihrer Karte weitere Daten hinzu: