swift - 按下按钮时的当前位置 map 图钉

标签 swift xcode

我一直在尝试制作一个应用程序,当按下标记调查结果按钮时, map 图钉会在用户的当前位置弹出。

问题是,每当我在 IBAction 中调用 DidUpdateLocations 时, map 注释永远不会出现。但是,如果这个函数在 IBAction 之外,它就可以完美地工作。当我在 IBAction 外部和内部调用该函数时,会显示连续的 map 图钉流。

这是我的代码:

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

}


}

这是我的主要 Storyboard:

Main.Storyboard

最佳答案

首先,将委托(delegate)函数 locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 移到 @IBAction func markStuff(_ sender: Any) 之外/p>

self.mapView.addAnnotation(annotationz)行之后,添加这行:manager.stopUpdatingLocation(),否则它会继续更新你的位置,因此调用委托(delegate)方法,并添加另一个引脚。

不是在 viewDidLoad 中调用 manager.startUpdatingLocation(),而是在按下按钮时调用它。更新后的代码应如下所示:

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...) 未被调用,因为它在您按钮的操作方法中...它被调用是因为 locationManager 已更新位置。它将继续更新您的位置,直到您通过调用 manager.stopUpdatingLocation() 另行通知它为止。

关于swift - 按下按钮时的当前位置 map 图钉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41654846/

相关文章:

ios - UIScrollView 底部的 UIButtons 不起作用

ios - 在 tableView 中下载图像(_ :, cellForRowAt :)

ios - 更新到最新版本的 CocoaPods?

ios - 这个弹出窗口类的名称是什么?

ios - 如何从本地路径加载图像 ios swift(按路径)

ios - 更新到 Xcode 10.2 后,构建在 testflight 上黑屏

ios - XCode:无法使用 -arch arm64 指定 -Q

iphone - 为什么会出现无效上下文错误?

ios - 使用 Xcode 7 开发适用于 iOS 6 和 iOS 7 的应用程序

ios - GameCenter iOS 排行榜标识符