私は、iPhoneにあるデフォルトの時計アプリを複製して、より迅速に学習し、iOS開発のさまざまな部分に慣れようとしています。
私は現在、アプリのタイマーセクションに取り組んでいます。日付を取得するDatePickerがあり、タイマーの開始時にcountdownDurationプロパティをTimeIntervalに割り当てています。ただし、これにより毎回ランダムな値が得られます(常に約80.0〜120.0のようです)
TimeIntervalsの概念が間違っている可能性があることは完全に理解していますが、オンラインおよび開発者向けドキュメントで読んだことから、概念は正しいですか?
タイマーの実行に使用しているコードは次のとおりです。
@IBOutlet weak var datePicker:UIDatePicker!
var IsTimerRunning:Bool = false;
var TimerDuration:TimeInterval = 0;
var timer:Timer?;
//Called every second when timer is running
@objc func onTimerFires() {
TimerDuration = TimerDuration - 1.0;
print (TimerDuration);
if (TimerDuration <= 0.0) {
EndTimer();
}
}
func EndTimer() {
timer?.invalidate();
IsTimerRunning = false;
}
//Start button pressed
@IBAction func StartButtonPressed() {
if (IsTimerRunning == false) {
TimerDuration = datePicker.countDownDuration;
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(onTimerFires), userInfo: nil, repeats: true)
IsTimerRunning = true;
}
}
いくつかの考慮事項:
日付ピッカーにcountDownTimerのモードがあることを確認してください。ドキュメントは言います:
日付ピッカーのモードがでない場合
UIDatePicker.Mode.countDownTimer
、この値[countDownDuration
]は未定義です。
これをIBに追加した場合は、「date」プロパティを「Custom」に設定することをお勧めします。ドキュメントが警告しているように:
注意
Interface Builderを使用してMode属性をCountDown Timerに設定し、timer属性の値を指定すると、プロジェクトをビルドして実行するときに、日付ピッカーがTimer属性の値を尊重しない場合があります。これが発生した場合は、日付ピッカーの属性インスペクターに戻り、「日付」ポップアップメニューで「カスタム」を選択し(関連する値は無視できます)、プロジェクトを再構築します。
countDownDuration
IBの「日付」ポップアップメニューで「カスタム」を選択するまで、非常に奇妙な値に気づきました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加