2015-10-17 23 views
6

Pracuję nad moją pierwszą szybką aplikacją na iPada. Do tej pory mam podstawowy widok mapy z przyciskiem na dolnym pasku narzędzi, który chciałbym odświeżyć i skupić się na lokalizacji użytkowników po kliknięciu.Odświeżenie lokalizacji przycisku mapy

Obecnie mam ten kod:

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

}

Jak mogę uzyskać przycisk Odśwież, aby to zrobić? Ja naprawdę potrzebuję pomocy ponieważ jestem nowy Swift/Xcode :)

Dziękuję

+0

Nie jestem pewien, czy dobrze cię zrozumiałem. Dlaczego po prostu nie umieszczasz akcji w kontrolerze i nie odświeżasz danych w swoich usługach/menedżerach? – razor118

+0

Jak mam to zrobić, przepraszam? Jestem naprawdę nowy w Xcode :(@ razor118 Chciałbym, aby przycisk odświeżania odświeżył ostatnią lokalizację po naciśnięciu – Oscar

Odpowiedz

5

Jako @Orkhan powiedział, że możesz to zrobić w ten sposób.

Jeśli chcesz wykonać akcję, po prostu przeciągnij ctrl, aby wyświetlić kontroler i wybierz "Akcja".

enter image description here

Po tym można dodać kod do obsługi.

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

Cześć, próbując tego, ale otrzymuję "wykorzystanie nierozwiązanych zidentyfikowanych" lokalizacji ", w pierwszym wierszu :(Dlaczego tak się dzieje? Dziękujemy za pomoc – Oscar

+0

Zaktualizowany W menedżerze lokalizacji zapisuje się ostatnią lokalizację W akcji przycisku ustawiamy ostatnią lokalizację do mapowania – razor118

+0

Gdzie umieścić ten kod? Wewnątrz "func locationManager (manager: CLLocationManager, didUpdateLocations lokalizacje: [CLLocation ]) {”Dzięki funkcji? ponownie – Oscar

1

można zaktualizować swoją lokalizację tej funkcji:

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

Jeśli twój cel jest iOS 8, trzeba aby dodać klucz NSLocationAlwaysUsageDescription do pliku Info.plist.

3

Spróbuj następujący kod 3 linia:

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

EDIT

sprawdzić:

widzisz kropkę po lewej stronie tej metody?

enter image description here

Chcę zobaczyć połączeń inspektor. Przycisk Odśwież i metoda refresh są poprawnie podłączone?

enter image description here

+0

Wciąż bez zmian :( – Oscar

Powiązane problemy