Я новичок в Swift и создаю ГИС-приложение, используя ArcGIS Runtime для IOS, чтобы узнать больше. Часть приложения дает кому-то возможность рисовать временную графику поверх карты. Прямо сейчас, когда я переключаюсь между точкой / полилинией / многоугольником, графика для всего, что было нарисовано ранее, удаляется, и мне было интересно, есть ли способ сохранить их там, пока не нажата кнопка «CLEAR».
Я верю, что ответ лежит в self.sketchEditor.start (с: nil, creationMode: [draw style])
"nil" стирает то, что было раньше, но я не могу понять, что мне нужно замените его на то, чтобы оно сохраняло любую нарисованную в данный момент графику.
Ниже приведен мой код, любая помощь будет принята с благодарностью.
//
// ViewController.swift
// [name]
//
// Created by
//
//
import UIKit
import ArcGIS
import MessageUI
class ViewController: UIViewController {
@IBOutlet weak var mapView: AGSMapView!
@IBOutlet weak var geometrySegmentedControl: UISegmentedControl!
@IBOutlet weak var undoBBI: UIButton!
@IBOutlet weak var clearBBI: UIButton!
private var map: AGSMap!
private var sketchEditor: AGSSketchEditor!
private func setupMap() {
let itemID = [portal map]
let portal = AGSPortal(url: URL(string: "https://www.arcgis.com")!, loginRequired: false)
let portalItem: AGSPortalItem = AGSPortalItem(portal: portal, itemID: itemID)
mapView.map = AGSMap(item: portalItem)
}
private func showAlert(withStatus: String) {
let alertController = UIAlertController(title: "Alert", message:
withStatus, preferredStyle: UIAlertController.Style.alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertAction.Style.default,handler: nil))
present(alertController, animated: true, completion: nil)
}
func setupLocationDisplay() {
mapView.locationDisplay.autoPanMode = AGSLocationDisplayAutoPanMode.compassNavigation
mapView.locationDisplay.start { [weak self] (error:Error?) -> Void in
if let error = error {
self?.showAlert(withStatus: error.localizedDescription)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupMap()
setupLocationDisplay()
let itemID = [portal]
let portal = AGSPortal(url: URL(string: "https://www.arcgis.com")!, loginRequired: false)
let portalItem: AGSPortalItem = AGSPortalItem(portal: portal, itemID: itemID)
self.map = AGSMap(item: portalItem)
self.sketchEditor = AGSSketchEditor()
self.mapView.sketchEditor = self.sketchEditor
self.sketchEditor.start(with: nil, creationMode: .unset)
self.mapView.map = self.map
self.mapView.interactionOptions.isMagnifierEnabled = false
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.respondToGeomChanged), name: .AGSSketchEditorGeometryDidChange, object: nil)
}
@objc
func respondToGeomChanged() {
//Enable/disable UI elements appropriately
self.undoBBI.isSelected = self.sketchEditor.undoManager.canUndo
self.clearBBI.isSelected = self.sketchEditor.geometry != nil && !self.sketchEditor.geometry!.isEmpty
}
// MARK: - Actions
@IBAction func geometryValueChanged(_ geometrySegmentedControl: UISegmentedControl) {
switch geometrySegmentedControl.selectedSegmentIndex {
case 0://multipoint
self.sketchEditor.start(with: nil, creationMode: .unset)
case 1://freehand polyline
self.sketchEditor.start(with: nil, creationMode: .freehandPolyline)
case 2://freehand polygon
self.sketchEditor.start(with: nil, creationMode: .freehandPolygon)
case 3://multipoint
self.sketchEditor.start(with: nil, creationMode: .multipoint)
default:
break
}
self.mapView.sketchEditor = self.sketchEditor
}
@IBAction func undo() {
if self.sketchEditor.undoManager.canUndo { //extra check, just to be sure
self.sketchEditor.undoManager.undo()
}
}
@IBAction func clear() {
self.sketchEditor.clearGeometry()
}
}