活动指示器未正确显示

时间:2015-05-30 01:06:18

标签: swift activity-indicator

我正在尝试创建一个"模拟"通过在用户单击“保存”按钮时显示活动指示符与服务器交互。 (完成的应用程序实际上将与服务器交互)我为保存按钮设置了一个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
}

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分: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
}