App Store にあったドラッグ レース アプリの更新に取り組んでいます。以前は、ユーザーが「開始」ボタンを押すと、カウントダウンが始まり、タイマーが 0 になった後、アプリはレースに必要なさまざまなものを追跡していました。たとえば、ユーザーが時速 60 マイル、1/8 マイル、1/4 マイルを達成するのにかかる時間。ただし、ユーザーが開始ボタンを押して、いつでも起動できるようにする設定を追加しています。アプリが動きを感知すると、以前のバージョンでタイマー ヒット 0 を設定したのと同じように、動きの追跡を開始します。ただし、アプリが情報を追跡する前に動きを感知するまで「待機」するために使用する最善の方法について混乱しています。私は次のことを試しました:
if(zeroTosixtyStyle == true){
Warninglabel.text = ("Launch when you are ready!")
repeat {
sleep(UInt32(0.01))
}while(locationManager.location?.speed ?? 0 < 2 );
processTwo()
}else{
timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector:
#selector(ZerotoSixtyViewController.DecupdateCounter), userInfo: nil, repeats: true)
DecupdateCounter()
}
ただし、これは明らかに良い解決策ではありません。CPU 使用率が上昇し、アプリの特定の部分が応答しなくなります。メソッドを使用すると、実際に「警告ラベル」が作成され、ループが開始する前に実際には文字列に更新されていません。「processTwo()」に移動するためにアプリが動きを感知するまで待つより効率的な方法は何ですか?
詳細については、「zeroTosixtyStyle」はユーザー設定によって設定されたブール値です。true の場合、アプリはユーザーの起動を待機し、false の場合はカウントダウンを実行します。これは正しく動作します。