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按钮。我相信我忽略了一些显而易见的事情,并且想知道是否有人有任何想法可以提供帮助。谢谢。
答案 0 :(得分:0)
您必须使用位置管理器的委托(CLLocationManagerDelegate)方法。使用方法:
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {}
在此你应该更新位置。