繁体   English   中英

Xcode Swift删除MKPolyline

[英]Xcode Swift Remove MKPolyline

我正在编写一个能够跟踪用户的位置并在地图上进行跟踪的应用程序。 有三个按钮,一个开始跟踪用户放下的路径,一个按钮停止跟踪用户放下的路径,最后一个是清除被跟踪线的地图。 我在设置清除按钮时遇到了麻烦。 有人可以帮我为清除路径按钮设置@IBAction。

import UIKit
import CoreLocation
import MapKit

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

    @IBOutlet weak var theMap: MKMapView!
    @IBOutlet weak var startStopTracking: UISegmentedControl!
    @IBOutlet weak var clearPath: UIButton!
    @IBOutlet weak var label: UILabel!

    var manager:CLLocationManager!
    var myLocations: [CLLocation] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        //Setup our Location Manager
        manager = CLLocationManager()
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestAlwaysAuthorization()
        //manager.startUpdatingLocation()

        //Setup our Map View
        theMap.delegate = self
        theMap.mapType = MKMapType.Hybrid
        theMap.showsUserLocation = true

        //Setup startStopTracking button?

        startStopTracking.selectedSegmentIndex = -1
    }

    @IBAction func indexChanged(sender: UISegmentedControl) {
            switch startStopTracking.selectedSegmentIndex
            {
            case 0:
                manager.startUpdatingLocation()
            case 1:
                manager.stopUpdatingLocation()
            default:
                break;
            }
    }

    @IBAction func clearPath(sender: UIButton) {
        //label.text = String(myLocations.count)
        //stopTracking()
        //theMap.removeOverlay(overlay: MKOverlay) -> Void
    }

    func stopTracking() {
        manager.stopUpdatingLocation()
        myLocations = []
    }

    func locationManager(manager:CLLocationManager, didUpdateLocations locations:[AnyObject]) {
        //theLabel.text = "\(locations[0])"
        myLocations.append(locations[0] as CLLocation)

        let spanX = 0.007
        let spanY = 0.007
        var newRegion = MKCoordinateRegion(center: theMap.userLocation.coordinate, span: MKCoordinateSpanMake(spanX, spanY))
        theMap.setRegion(newRegion, animated: true)

        if (myLocations.count > 1){
            var sourceIndex = myLocations.count - 1
            var destinationIndex = myLocations.count - 2

            let c1 = myLocations[sourceIndex].coordinate
            let c2 = myLocations[destinationIndex].coordinate
            var a = [c1, c2]
            var polyline = MKPolyline(coordinates: &a, count: a.count)
            theMap.addOverlay(polyline)
        }
    }


    func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {

        if overlay is MKPolyline {
            var polylineRenderer = MKPolylineRenderer(overlay: overlay)
            polylineRenderer.strokeColor = UIColor.blueColor()
            polylineRenderer.lineWidth = 6
            return polylineRenderer
        }
        return nil
    }
}

试试这个:删除所有

   for poll in mapkit.overlays {

        mapkit.removeOverlay(poll)
    }

您必须将polyline为类属性,以便可以在clearPath方法中对其进行访问:

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {
    ...
    var polyline: MKPolyline = MKPolyline()


    @IBAction func clearPath(sender: UIButton) {
        //label.text = String(myLocations.count)
        //stopTracking()
        theMap.removeOverlay(polyline)
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM