2015-10-14 2 views
0

Я пытаюсь запустить только простую функцию печати, когда пользователь перемещает карту вокруг, используя жест или поиск (перемещает карту в целом). Я следил за ссылками на apple ref, и я получаю ошибки. Ive следовал за другими сообщениями о переполнении стека и другими результатами поиска google. Я не знаю, связано ли это с тем, что im использует swift 2 или что-то в моем коде в другом месте, что противоречит. Если бы кто-нибудь мог мне помочь, это было бы очень полезно. Вот мой кодregionDidChangeAnimated не работает

import UIKit 
import MapKit 
import CoreLocation 

class ViewController: UIViewController, MKMapViewDelegate, 
CLLocationManagerDelegate, UISearchBarDelegate 
{ 





@IBOutlet weak var mapView: MKMapView! 
@IBOutlet weak var searchBar: UISearchBar! 

let locationManager = CLLocationManager() 




@IBAction func showSearchBar(sender: AnyObject) { 
    searchController = UISearchController(searchResultsController: nil) 
    searchController.hidesNavigationBarDuringPresentation = false 
    self.searchController.searchBar.delegate = self 
    presentViewController(searchController, animated: true, completion: nil) 
} 


@IBAction func locateMe(sender: AnyObject) { 

    self.locationManager.delegate = self 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    self.locationManager.requestWhenInUseAuthorization() 
    self.locationManager.startUpdatingLocation() 

    self.mapView.showsUserLocation = true 

} 

@IBAction func photographer(sender: AnyObject) { 
} 

@IBAction func buyer(sender: AnyObject) { 
} 







var searchController:UISearchController! 
var annotation:MKAnnotation! 
var localSearchRequest:MKLocalSearchRequest! 
var localSearch:MKLocalSearch! 
var localSearchResponse:MKLocalSearchResponse! 
var error:NSError! 
var pointAnnotation:MKPointAnnotation! 
var pinAnnotationView:MKPinAnnotationView! 




override func viewDidLoad() 
{ 
    super.viewDidLoad() 




    self.locationManager.delegate = self 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    self.locationManager.requestWhenInUseAuthorization() 
    self.locationManager.startUpdatingLocation() 

    self.mapView.showsUserLocation = true 


    func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool) { 
     hobo() 
    } 






} 

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






//  MARK: - 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: 0.01, longitudeDelta: 0.01)) 

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

    self.locationManager.stopUpdatingLocation() 
} 







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





func searchBarSearchButtonClicked(searchBar: UISearchBar){ 
    //1 
    searchBar.resignFirstResponder() 
    dismissViewControllerAnimated(true, completion: nil) 
    if self.mapView.annotations.count != 0{ 
     annotation = self.mapView.annotations[0] 
     self.mapView.removeAnnotation(annotation) 
    } 
    //2 
    localSearchRequest = MKLocalSearchRequest() 
    localSearchRequest.naturalLanguageQuery = searchBar.text 
    localSearch = MKLocalSearch(request: localSearchRequest) 
    localSearch.startWithCompletionHandler { (localSearchResponse, error) -> Void in 

     if localSearchResponse == nil{ 
      let alertController = UIAlertController(title: nil, message: "Place Not Found", preferredStyle: UIAlertControllerStyle.Alert) 
      alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alertController, animated: true, completion: nil) 
      return 
     } 
     //3 
     self.pointAnnotation = MKPointAnnotation() 
     self.pointAnnotation.title = searchBar.text 
     self.pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: localSearchResponse!.boundingRegion.center.latitude, longitude:  localSearchResponse!.boundingRegion.center.longitude) 


     self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation, reuseIdentifier: nil) 
     self.mapView.centerCoordinate = self.pointAnnotation.coordinate 
     self.mapView.addAnnotation(self.pinAnnotationView.annotation!) 
    } 
} 





func hobo(){ 
    print("testing") 
} 



} 

ответ

1

Убедитесь, что вы назначили себя делегатом своего вида на карте в IB. Кроме того, я бы попытался перемещать regionDidChangeAnimated из viewDidLoad.

+0

Извините, что я по-прежнему новичок на этом языке, вы можете объяснить, что вы имеете в виду в первой части этого ответа? – RubberDucky4444

Смежные вопросы