我试图在 Swift 3 中以设定的时间间隔获取位置更新,但它 运行 每个时间间隔都是我的函数很多次,它应该只 运行 一次
I am trying to get updates on location with a set interval in Swift 3, but it runs my function a lot of times each interval, it should only run once
我正在使用 locationManager.startUpdatingLocation() 获取用户的位置,然后调用一个函数来处理我的所有逻辑,问题是它似乎被调用了多次,我不知道为什么。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
long = locValue.longitude
lat = locValue.latitude
if(self.arrayOfCellData.count > 0)
{
for i in 0...self.arrayOfCellData.count-1
{
getdistance(lat0: self.arrayOfCellData[i].shop.latitude!, long0: self.arrayOfCellData[i].shop.longitude!, lat1: locValue.latitude, long1: locValue.longitude)
{distance in
self.arrayOfCellData[i].meterstolocation = distance
}
}
DispatchQueue.main.async {
self.myTable.reloadData()
}
}
print("stopped updating")
locationManager.stopUpdatingLocation()
}
var run: Bool = true;
func updateLocations()
{
if(run)
{
run = false;
}
else
{
locationManager.startUpdatingLocation()
}
}
override func viewDidLoad() {
super.viewDidLoad()
//
locationManager.requestAlwaysAuthorization()
//
//
//
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.startUpdatingLocation()
Timer.scheduledTimer(timeInterval: 10,
target: self,
selector: #selector(self.updateLocations),
userInfo: nil,
repeats: true)
}
我的输出是:
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
输出本身是正确的,但它一次吐出多个打印件。而且我不希望代码 运行 多次,每个间隔只有一次。
获取位置后不应调用locationManager.stopUpdatingLocation(),也不需要计时器。只需在开始时调用 locationManager.startUpdatingLocation() 一次,它就会自动向您发送更新,但仅在位置发生变化时。请参阅 https://developer.apple.com/reference/corelocation/cllocationmanager
处的文档
我正在使用 locationManager.startUpdatingLocation() 获取用户的位置,然后调用一个函数来处理我的所有逻辑,问题是它似乎被调用了多次,我不知道为什么。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
long = locValue.longitude
lat = locValue.latitude
if(self.arrayOfCellData.count > 0)
{
for i in 0...self.arrayOfCellData.count-1
{
getdistance(lat0: self.arrayOfCellData[i].shop.latitude!, long0: self.arrayOfCellData[i].shop.longitude!, lat1: locValue.latitude, long1: locValue.longitude)
{distance in
self.arrayOfCellData[i].meterstolocation = distance
}
}
DispatchQueue.main.async {
self.myTable.reloadData()
}
}
print("stopped updating")
locationManager.stopUpdatingLocation()
}
var run: Bool = true;
func updateLocations()
{
if(run)
{
run = false;
}
else
{
locationManager.startUpdatingLocation()
}
}
override func viewDidLoad() {
super.viewDidLoad()
//
locationManager.requestAlwaysAuthorization()
//
//
//
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.startUpdatingLocation()
Timer.scheduledTimer(timeInterval: 10,
target: self,
selector: #selector(self.updateLocations),
userInfo: nil,
repeats: true)
}
我的输出是:
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
stopped updating
locations = 37.33228724 -122.05833354
输出本身是正确的,但它一次吐出多个打印件。而且我不希望代码 运行 多次,每个间隔只有一次。
获取位置后不应调用locationManager.stopUpdatingLocation(),也不需要计时器。只需在开始时调用 locationManager.startUpdatingLocation() 一次,它就会自动向您发送更新,但仅在位置发生变化时。请参阅 https://developer.apple.com/reference/corelocation/cllocationmanager
处的文档