【发布时间】:2020-07-04 15:25:01
【问题描述】:
我正在尝试从 5 到 0 倒计时,而用户方位角在真北的 20 到 -20 弧度之间。如果方位保持在 20 和 -20 之间 5 秒,则继续使用新控制器。我什么都试过了,基本上都放弃了。
我尝试了很多东西,包括scheduleTimer(withInterval 1.0){}
我是 Swift 的新手。我无法使计时器无效。
这是获取用户的标题
@objc func getUserHeading(_ latitude : Double, _ longitude : Double, _ userLocation : CLLocation){
let lat1 = (latitude) * .pi / 180
let long1 = (longitude) * .pi / 180
let lat2 = (yourLocation.coordinate.latitude) * .pi / 180
let long2 = (yourLocation.coordinate.longitude) * .pi / 180
print(lat1, long1, lat2, long2)
let dLon = long2 - long1
let y = sin(dLon) * cos(lat2)
let x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon)
var radiansBearing = atan2(y, x)
if radiansBearing < 0 {
radiansBearing += 2 * Double.pi
}
theta = (radiansBearing * 180 / .pi) - (angle)
print(theta)
if (theta < 20 && theta > = -20 ){
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
print("Timer Fired")
runCount += 1
if(theta > 20 && theta < -20)
{
self.timer.invalidate()
self.timerStarted = false
}
if (runCount == 5)
{
self.timer.invalidate()
self.segueToNewController()
}
}
else{
timer.invalidate()
timerStarted = false
}
}
这可能是语义上的问题,但我发誓我已经为此花费了 DAYS 天,但我觉得我无处可去。
目前的问题
- 在 20 到 -20 之间时会触发,但会立即触发且不会等待 5 秒
- 它触发了很多次,这意味着下一个控制器的 segue 被调用了很多次(它导致我的 firestore 写入了 5k 次)
如果你们还需要什么,请告诉我,我们会用更多代码更新问题。 所有帮助表示赞赏!我的智慧在这里结束
【问题讨论】:
标签: swift timer uiviewcontroller