Sdílet prostřednictvím


Zobrazení informací o funkcích v sadě iOS SDK (Preview)

Poznámka:

Vyřazení sady Azure Mapy iOS SDK

Sada Azure Mapy Native SDK pro iOS je teď zastaralá a bude vyřazena 31. 31. 25. Pokud se chcete vyhnout přerušení služeb, proveďte migraci do sady Azure Mapy Web SDK do 31. 31. 25. Další informace najdete v průvodci migrací sady Azure Mapy iOS SDK.

Prostorová data se často reprezentují pomocí bodů, čar a mnohoúhelníku. Tato data často obsahují informace o metadatech, které jsou k němu přidružené. Například bod může představovat umístění restaurace a metadata o této restauraci mohou být jeho název, adresa a typ jídla, které podává. Tato metadata lze přidat jako vlastnosti GeoJSON Feature. Následující kód vytvoří jednoduchou funkci bodu s title vlastností, která má hodnotu "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)

Další informace o tom, jak vytvořit a přidat data do mapy, najdete v tématu Vytvoření zdroje dat.

Když uživatel pracuje s funkcí na mapě, je možné události použít k reakci na tyto akce. Běžným scénářem je zobrazení zprávy s vlastnostmi metadat funkce, se kterou uživatel pracoval. Událost azureMap(_:didTapOn:) je hlavní událost, která slouží ke zjištění, kdy uživatel na mapě klepne na funkci. Je tu také azureMap(_:didLongPressOn:) událost. Když se delegát přidá do mapy, může být omezen na jednu vrstvu předáním ID vrstvy, na kterou se má omezit. Pokud se nepředá žádné ID vrstvy, po klepnutí na libovolnou funkci na mapě bez ohledu na to, ve které vrstvě se nachází, by se tato událost aktivovala. Následující kód vytvoří vrstvu symbolů pro vykreslení dat bodu na mapě a pak přidá delegáta, omezený na tuto vrstvu symbolů azureMap(_:didTapOn:) , která zpracovává událost.

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

Zobrazit výstrahu

Upozornění je jedním z nejjednodušších způsobů zobrazení informací uživateli a je k dispozici ve všech obvykle podporovaných verzích iOSu. Pokud chcete uživateli rychle dát vědět něco o tom, na co klepnul, může být dobrou volbou upozornění. Následující kód ukazuje, jak se dá s událostí azureMap(_:didTapOn:) použít upozornění.

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

Animace funkce, na kterou se klepne, a zobrazí se upozornění.

Kromě výstrah existuje mnoho dalších způsobů, jak prezentovat vlastnosti metadat funkce, například:

  • Přidání vlastního zobrazení přes mapu
  • Přidání kontroleru podřízeného zobrazení přes mapu
  • Prezentujte modálně jiný kontroler zobrazení nad aktuálním kontrolerem.
  • Přejděte na jiný kontroler zobrazení.

Zobrazení místní nabídky

Sada Azure Mapy iOS SDK poskytuje Popup třídu, která usnadňuje vytváření prvků poznámek uživatelského rozhraní ukotvených na pozici na mapě. V případě automaticky otevíraných oken musíte předat zobrazení vlastní velikosti do content možnosti automaticky otevíraného okna. Tady je jednoduchý příklad zobrazení, který zobrazuje tmavý text nad bílým pozadím.

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

Následující kód vytvoří místní okno, přidá ho do mapy. Při klepnutí na title funkci se vlastnost zobrazí pomocí PopupTextView třídy se středem dolní části rozložení ukotveného k zadané poloze na mapě.

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

Následující snímek obrazovky ukazuje automaticky otevírané okno, když se po klepnutí na funkce a umístění na mapě při přesouvání zakotví.

Animace automaticky otevíraného okna, které se zobrazuje s mapou, když je místní nabídka ukotvená

Další informace

Přidání dalších dat do mapy: