Udostępnij za pośrednictwem


Wyświetlanie informacji o funkcji w zestawie SDK systemu iOS (wersja zapoznawcza)

Uwaga

Wycofanie zestawu AZURE Mapy iOS SDK

Zestaw Azure Mapy Native SDK dla systemu iOS jest teraz przestarzały i zostanie wycofany w dniu 3/31/25. Aby uniknąć przerw w działaniu usługi, przeprowadź migrację do zestawu Sdk sieci Web usługi Azure Mapy do 31/31/25. Aby uzyskać więcej informacji, zobacz Przewodnik migracji zestawu SDK platformy Azure Mapy iOS.

Dane przestrzenne są często reprezentowane przy użyciu punktów, linii i wielokątów. Te dane często zawierają skojarzone z nim informacje o metadanych. Na przykład punkt może reprezentować lokalizację restauracji i metadanych dotyczących tej restauracji może być nazwą, adresem i typem serwowanej żywności. Te metadane można dodać jako właściwości pliku GeoJSON Feature. Poniższy kod tworzy prostą funkcję punktu z właściwością title , która ma wartość "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)

Aby uzyskać więcej informacji na temat tworzenia i dodawania danych do mapy, zobacz Tworzenie źródła danych.

Gdy użytkownik wchodzi w interakcję z funkcją na mapie, zdarzenia mogą służyć do reagowania na te akcje. Typowym scenariuszem jest wyświetlenie komunikatu o właściwościach metadanych funkcji, z którymi użytkownik wchodził w interakcję. Zdarzenie azureMap(_:didTapOn:) jest głównym zdarzeniem używanym do wykrywania, kiedy użytkownik wykorzystał funkcję na mapie. Istnieje również azureMap(_:didLongPressOn:) zdarzenie. Po dodaniu delegata do mapy można go ograniczyć do pojedynczej warstwy, przekazując identyfikator warstwy, aby go ograniczyć. Jeśli żaden identyfikator warstwy nie zostanie przekazany, naciśnięcie dowolnej funkcji na mapie, niezależnie od warstwy, w której znajduje się, spowoduje wyzwolenie tego zdarzenia. Poniższy kod tworzy warstwę symboli w celu renderowania danych punktów na mapie, a następnie dodaje delegata ograniczone do tej warstwy symboli, która obsługuje azureMap(_:didTapOn:) zdarzenie.

// 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.
}

Wyświetlanie alertu

Alert jest jednym z najprostszych sposobów wyświetlania informacji użytkownikowi i jest dostępny we wszystkich typowych obsługiwanych wersjach systemu iOS. Jeśli chcesz szybko poinformować użytkownika o tym, co naciągnął, alert może być dobrą opcją. Poniższy kod pokazuje, jak można użyć alertu ze zdarzeniem azureMap(_:didTapOn:) .

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

Animacja zamapowanej funkcji i wyświetlany alert.

Oprócz alertów istnieje wiele innych sposobów prezentowania właściwości metadanych funkcji, takich jak:

  • Dodawanie widoku niestandardowego na mapie
  • Dodawanie kontrolera widoku podrzędnego na mapie
  • Prezentuj modalnie inny kontroler widoku na bieżącym.
  • Przejdź do innego kontrolera widoku.

Wyświetlanie wyskakującego okienka

Zestaw AZURE Mapy iOS SDK udostępnia klasęPopup, która ułatwia tworzenie elementów adnotacji interfejsu użytkownika, które są zakotwiczone na pozycji na mapie. W przypadku wyskakujących okienek musisz przekazać widok samodzielnego określania rozmiaru do content opcji wyskakującego okienka. Oto prosty przykład widoku, który wyświetla ciemny tekst na białym tle.

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
    }
}

Poniższy kod tworzy wyskakujące okienko, dodaje go do mapy. Po naciśnięciu title funkcji właściwość jest wyświetlana przy użyciu PopupTextView klasy z dolnej środkowej części układu zakotwiczonego do określonej pozycji na mapie.

// 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()
}

Na poniższym zrzucie ekranu są wyświetlane wyskakujące okienka po naciśnięciu funkcji i pozostaniu zakotwiczonym w określonej lokalizacji na mapie podczas jej przesuwania.

Animacja wyskakującego okienka wyświetlanego z mapą poruszającą się podczas zakotwiczenia wyskakującego okienka.

Dodatkowe informacje

Aby dodać więcej danych do mapy: