2015-02-20 7 views
1

В настоящее время я не могу очистить overlay.I хотел бы очистить мой оверлей, который был перемещен, а затем начать снова. Я посмотрел на тонну различных строк кода и, похоже, не понял этого. Не могли бы вы помочь мне в этом? Я новичок в Swift поэтому, пожалуйста, играйте :)MapKit Overlay Swift Issue

import UIKit 
import CoreLocation 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate { 

    @IBOutlet weak var theMap: MKMapView! 
    @IBOutlet weak var theLabel: UILabel! 
    @IBOutlet weak var startTracking: UIButton! 
    @IBOutlet weak var stopTracking: UIButton! 
    @IBOutlet weak var clearTrack: UIButton! 

    var polyline:MKPolyline = MKPolyline() 
    var manager:CLLocationManager! 
    var myLocations: [CLLocation] = [] 

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

    func stopTracking(sender: UIButton) { 
     manager.stopUpdatingLocation() 
     myLocations = [] 
     println("Stop making a line") 
    } 

    func startTracking(sender: UIButton) { 
     manager.startUpdatingLocation() 
     myLocations = [] 
     println("Making a line") 
    } 


    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 
    } 

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

     let spanX = 0.002 
     let spanY = 0.002 
     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.yellowColor() 
      polylineRenderer.lineWidth = 3 
      return polylineRenderer 
     } 
     return nil 
    } 
} 
+0

Что вы пробовали? Нам важно знать, потому что иначе мы, возможно, покажем вам код, который вы уже пробовали. – Christian

+0

Отчасти причина, по которой 'theMap.removeOverlay (полилиния)' не работает внутри 'clearTrack', заключается в том, что она ссылается на переменную _class-level_' polyline', но в 'didUpdateLocations', наложение добавляется с помощью переменной _local_ ('var polyline = ...'), который просто имеет одно и то же имя, но эти два совершенно разные. – Anna

+0

Я пробовал IBAction Func. Я попытался удалить addOverlay и сделать это частью опции startTracking. Я не пробовал, что сказал Дейв ниже, который я попробую, когда вернусь домой. – IshallbemikeB

ответ

1

Вы пытались использовать:

func clearTrack(sender: UIButton){ 
    theMap.removeOverlays(theMap.overlays) 
} 
+0

Dave Большое вам спасибо, что сработало отлично. У меня было чувство, когда я увидел ваш ответ, это было хорошо. Я попробовал что-то совсем другое, а не то, что вы положили haha. Спасибо за вашу помощь. – IshallbemikeB