2017-01-14 16 views
0

私は、マーク結果ボタンが押されたときに地図ピンがユーザの現在の場所にポップアップするアプリケーションを作ろうとしていました。ボタンが押されたときの現在の位置の地図ピン

問題は、IBActionでDidUpdateLocationsを呼び出すたびに、マップ注釈が決して表示されないことです。それはIBActionの外にある場合は、この機能は完璧に動作します。 IBActionの外側と内側の両方の関数を呼び出すと、マップ・ピンの連続ストリームが表示されます。ここで

は私のコードです:ここでは

import UIKit 
import MapKit 
import CoreLocation 


class SecondViewController: UIViewController, CLLocationManagerDelegate,MKMapViewDelegate { 
@IBOutlet var mapView: MKMapView! 
let manager = CLLocationManager() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    manager.delegate = self 
    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.requestWhenInUseAuthorization() 
    manager.startUpdatingLocation() 

} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

@IBAction func markStuff(_ sender: Any) { 
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let location = locations[0] 
     let span:MKCoordinateSpan = MKCoordinateSpanMake(0.001, 0.001) 
     let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) 
     let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span) 
     let annotation = MKPointAnnotation() 
     annotation.coordinate = location.coordinate 
     mapView.setRegion(region, animated: true) 
     self.mapView.addAnnotation(annotationz) 
    } 

} 


} 

は私main.storyboardです:

Main.Storyboard

+0

あなたはなぜあなたはこのアクションメソッド、おかげでそんなにevrytime –

答えて

2

まず、ラインself.mapView.addAnnotation(annotationz)@IBAction func markStuff(_ sender: Any)

のデリゲート関数にlocationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])外を移動します次の行を追加してください:manager.stopUpdatingLocation()、またはそれ以外の場合はupdaあなたの場所を伝えてデリゲートメソッドを呼び出し、別のピンを追加します。

manager.startUpdatingLocation()viewDidLoadに呼び出す代わりに、ボタンを押したときに呼び出します。更新されたコードは次のようになります。locationManager場所を更新しているので、それはあなたのボタンのアクションメソッド内だから

import UIKit 
import MapKit 
import CoreLocation 


class SecondViewController: UIViewController, CLLocationManagerDelegate,MKMapViewDelegate { 
    @IBOutlet var mapView: MKMapView! 
    let manager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     manager.delegate = self 
     manager.desiredAccuracy = kCLLocationAccuracyBest 
     manager.requestWhenInUseAuthorization() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func markStuff(_ sender: Any) { 

     manager.startUpdatingLocation() 

    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let location = locations[0] 
     let span:MKCoordinateSpan = MKCoordinateSpanMake(0.001, 0.001) 
     let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) 
     let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span) 
     let annotation = MKPointAnnotation() 
     annotation.coordinate = location.coordinate 
     mapView.setRegion(region, animated: true) 
     self.mapView.addAnnotation(annotationz) 
     manager.stopUpdatingLocation() 
    } 

} 

locationManager(manager:didUpdate...)

が呼び出されていない...それが呼び出されています。 manager.stopUpdatingLocation()に電話することで、あなたがそれ以外のことを言うまであなたの場所を更新し続けます。

+0

呼び出されるデリゲートの下didupdatelocationを入れ、正確に何をしたいのスクリーンショットを追加することができます。これは本当に助けになった – Pannu

関連する問題