2015-10-17 3 views
6

Ich arbeite an meiner ersten schnellen Anwendung für das iPad. Bis jetzt habe ich eine einfache MapView mit einer Schaltfläche in der unteren Symbolleiste, die ich aktualisieren möchte und auf den Benutzer Standort einmal geklickt konzentrieren.Map Button Refresh Location

Zur Zeit habe ich diesen Code:

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) 
} 

}

Wie kann ich den Refresh-Button, dies zu tun bekommen? Ich brauche wirklich etwas Hilfe, wie ich bin neu in Swift/Xcode :)

Danke

+0

Ich bin mir nicht sicher, ob ich Sie richtig verstanden. Warum legen Sie die Aktion nicht einfach auf den Controller und aktualisieren die Daten in Ihren Diensten/Managern? – razor118

+0

Wie würde ich das tun? Ich bin wirklich neu in xcode :(@ razor118 Ich möchte für die Aktualisierungsschaltfläche auf den neuesten Stand zu aktualisieren, wenn gedrückt – Oscar

Antwort

5

Wie @Orkhan sagte, Sie können es auf diese Weise tun.

Wenn Sie die Aktion ausführen möchten, ziehen Sie einfach Strg-Drag auf ViewController und wählen Sie "Aktion".

enter image description here

Danach können Sie Code in dem Handler hinzuzufügen.

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

Hallo, versuche dies, aber ich bekomme "Verwendung von nicht aufgelösten" Standorten "identifiziert, in der ersten Zeile :(Warum passiert das? Vielen Dank für Ihre Hilfe – Oscar

+0

Aktualisiert: In locationManager speichern Sie einfach den letzten Ort. In der Tastenaktion stellen wir den letzten zu mappenden Standort ein. – razor118

+0

Wo finde ich diesen Code? Innerhalb des "func locationManagers (Manager: CLLocationManager, didUpdateLocations locations: [CLLocation ]) {“Funktion? Thanks again – Oscar

1

Sie Ihren Standort mit dieser Funktion aktualisieren können:

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) 
} 

Wenn Ihr Ziel ist iOS 8, die Sie benötigen fügen Sie den Schlüssel NSLocationAlwaysUsageDescription in Ihre Info.plist ein.

3

Versuchen Sie, die folgenden 3 Zeilen Code:

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

EDIT

Folgendes überprüfen:

Können Sie den Punkt auf der linken Seite des Verfahrens sehen?

enter image description here

Ich möchte Ihre Verbindungen Inspektor sehen. Refresh-Taste und refresh Methode sind richtig verbunden?

enter image description here

+0

Noch keine Änderung :( – Oscar