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 回答