2015-10-17 11 views
6

Sto lavorando alla mia prima applicazione rapida per l'iPad. Finora ho una mapview di base con un pulsante nella barra degli strumenti in basso, che vorrei aggiornare e focalizzare sulla posizione degli utenti una volta cliccato.Posizione aggiornamento pulsante Mappa

Attualmente ho questo codice:

import UIKit 
import MapKit 
import CoreLocation 

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 

var location: CLLocation! 
let locationManager = CLLocationManager() 

@IBOutlet weak var mapView: MKMapView! 
@IBOutlet weak var refresh: UIBarButtonItem! 

@IBAction func refresh(sender: AnyObject) { 

    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 

    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

    self.mapView.setRegion(region, animated: true) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.locationManager.delegate = self 

    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 

    self.locationManager.requestWhenInUseAuthorization() 

    self.locationManager.startUpdatingLocation() 

    self.mapView.showsUserLocation = true 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// location delegate methods 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    let location = locations.last 

    let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) 

    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1, longitudeDelta: 1)) 

    self.mapView.setRegion(region, animated: true) 

    self.locationManager.stopUpdatingLocation() 

} 

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
{ 
    print("Error code: " + error.localizedDescription) 
} 

}

Come posso ottenere il pulsante di aggiornamento per fare questo? Io ho bisogno di aiuto, come io sono nuovo di Swift/Xcode :)

Grazie

+0

non sono sicuro se ho capito bene. Perché non metti l'azione al controller e aggiorni i dati nei tuoi servizi/gestori? – razor118

+0

Come faccio a fare questo mi dispiace? Sono davvero nuovo a xcode :(@ razor118 Desidero che il pulsante di aggiornamento aggiorni l'ultima posizione quando viene premuto – Oscar

risposta

5

Come @Orkhan ha detto che puoi farlo in questo modo.

Se si desidera eseguire l'azione, basta semplicemente fare clic tenendo premuto il tasto Ctrl per visualizzareController e selezionare "Azione".

enter image description here

Dopo di che è possibile aggiungere codice al gestore.

var location: CLLocation! 
    @IBAction func refreshLocation(sender: AnyObject) { 

    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

    self.map.setRegion(region, animated: true) 
} 

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    self.location = locations.last as CLLocation 
} 
+0

Ciao, provo questo, ma ottengo "l'uso di posizioni" non identificate ", nella prima riga :(Perché sta succedendo? Grazie per il vostro aiuto – Oscar

+0

Aggiornato. In locationManager è sufficiente salvare l'ultima posizione.In azione del pulsante impostiamo l'ultima posizione per mappare – razor118

+0

Dove inserisco questo codice? All'interno del "func locationManager (manager: CLLocationManager, didUpdateLocations posizioni: [CLLocation ]) {" funzione? Grazie ancora – Oscar

1

È possibile aggiornare la propria posizione con questa funzione:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    let location = locations.last as CLLocation 

    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)   
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

    self.map.setRegion(region, animated: true) 
} 

Se il tuo obiettivo è iOS 8, è necessario per aggiungere la chiavea Info.plist.

3

Provate il seguente codice a 3 righe:

@IBAction func refresh(sender: AnyObject) { 
    mapView.setCenterCoordinate(mapView.userLocation.coordinate, animated: true) 
} 

EDIT

Controllare i seguenti passaggi:

Riesci a vedere il punto sul lato sinistro del metodo?

enter image description here

voglio vedere il tuo connessioni ispettore. Il pulsante Aggiorna e il metodo refresh sono collegati correttamente?

enter image description here

+0

Ancora nessuna modifica :( – Oscar