首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode Swift删除MKPolyline

Xcode Swift删除MKPolyline
EN

Stack Overflow用户
提问于 2014-11-11 11:50:04
回答 2查看 3.7K关注 0票数 2

我正在写一个应用程序,有能力跟踪用户的位置,并在地图上跟踪它。有三个按钮,一个开始跟踪用户铺设的路径,一个停止跟踪用户铺设的路径,最后一个是清除被跟踪线的地图。我在设置清除按钮时遇到了麻烦。有人能帮我设置清除路径按钮的@IBAction吗?

代码语言:javascript
复制
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
    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-01-28 15:54:01

尝试此操作:删除所有

代码语言:javascript
复制
   for poll in mapkit.overlays {

        mapkit.removeOverlay(poll)
    }
票数 3
EN

Stack Overflow用户

发布于 2014-11-11 16:26:11

您必须将polyline设置为类属性,以便可以在clearPath方法中访问它:

代码语言:javascript
复制
class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {
    ...
    var polyline: MKPolyline = MKPolyline()


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

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26857149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档