0

ユーザーが [保存] ボタンをクリックしたときにアクティビティ インジケーターを表示することで、サーバーとの "シミュレートされた" 対話を作成しようとしています。(完成したアプリは実際にサーバーと対話します) 保存ボタン用の IBAction を設定し、activityIndi​​cator を呼び出してアニメーション化し、一時停止します。最後に、アクティビティ インジケーターが非表示になります。唯一の問題は、アクティビティ インジケーターが表示されないことです。と をコメントアウトするNSThread.sleepForTimeInterval(4)activityIndicatory.stopAnimating、アクティビティ インジケータが表示されます。[保存] ボタンの IBAction からそれらを移動しようとしましたが、コードでエラーが発生しました。コードは次のとおりです。

@IBAction func saveDTrans(sender: UIBarButtonItem) {

    activityIndicator.hidden = false
    activityIndicator.startAnimating()

    //pause code to let the activityIndicator show for a bit
    NSThread.sleepForTimeInterval(4)

    activityIndicator.stopAnimating()
    activityIndicator.hidden = true
}
4

2 に答える 2

1

これはメインスレッドであり、アクティビティインジケーターは実行されないため、スレッドにスリープを指示したいとは思いません。それも良い習慣ではありません。

dispatch_after ブロックに入れたほうがいい

@IBAction func saveDTrans(sender: UIBarButtonItem) 
{
    activityIndicator.hidden = false
    activityIndicator.startAnimating()

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 4 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
        activityIndicator.stopAnimating()
        activityIndicator.hidden = true
    }
}
于 2015-05-30T01:13:01.023 に答える
0

以下のコードは、メイン スレッドを停止します。

NSThread.sleepForTimeInterval(4)

代わりにこれを試してください:

@IBAction func saveDTrans(sender: UIBarButtonItem) {

    activityIndicator.hidden = false
    activityIndicator.startAnimating()

    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC)))
    dispatch_after(delayTime, dispatch_get_main_queue()) {
        activityIndicator.stopAnimating()
        activityIndicator.hidden = true
}
于 2015-05-30T01:15:52.157 に答える