当前位置问题

时间:2015-05-06 22:57:17

标签: ios swift annotations mapkit

import UIKit
import MapKit
import CoreLocation
import Foundation
import Darwin

class ViewController: UIViewController, CLLocationManagerDelegate {

let locationManager = CLLocationManager()

var annotation = MKPointAnnotation()

func getLocation ()-> CLLocation! {
    locationManager.startUpdatingLocation()
    var x = locationManager.location
    println(x.coordinate.latitude)
    println(x.coordinate.longitude)
    return x

}

我相信这个函数getLocation()是我的代码中的问题所在。

//Other variables and other actions have been set up here that are irrelevant to the problem within the code.

var wS:CLLocationCoordinate2D! = nil
var carParked:Bool = false
var currentCoord:CLLocation!

override func viewDidLoad() {
//I have set up map, annotation, etc. in viewDidLoad and have tested    that they all work perfectly fine.
}

@IBAction func pinButtonPressed(sender: AnyObject) {

    carParked = true
    var currentCoord = getLocation()
    wS = currentCoord.coordinate
    annotation.coordinate = wS
    map.addAnnotation(annotation)

    }

    @IBAction func carFound(sender: AnyObject) {

        carParked = false
        map.removeAnnotation(annotation)
        wS = nil

}

这两个按钮中的一个,pinButtonPressed或carFound将是错误的第二大可能位置。

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

我想要的代码是每当按下pinButtonPressed时,注释将被放置在用户的当前位置并保持在那里。为了删除注释,可以按carFound按钮。然后,在第一个注释放置后按下carFound按钮后,应该能够再次按下pinButtonPressed,并且注释应放在用户所在的任何位置,即使它们已移动。问题是第一次按下pinButtonPressed,注释会调用getLocation()函数,找到当前位置,并将其设置为注释坐标并放置注释,然后使用carFound删除注释;然后,在此之后我移动当前位置并再次按下pinButtonPressed函数,并将注释放置在原始时间的位置,而不是我移动到的位置。我已经放置了两条打印线来打印getLocation()函数返回的坐标,这些坐标始终与模拟开始运行后检索的第一个坐标相同,无论我将当前位置移动到哪里并按下pinButtonPressed按钮。我相信我忽略了一些显而易见的事情,并且想知道是否有人有任何想法可以提供帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您必须使用位置管理器的委托(CLLocationManagerDelegate)方法。使用方法:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {}

在此你应该更新位置。