ProgressView没有在使用Swift的View Controller上显示

时间:2015-12-30 15:09:33

标签: ios swift uialertcontroller uiprogressview

我正在显示一个alertController,如果用户单击是,则应显示ProgressView,但不幸的是,Progressview和标签不会出现。如何刷新ViewController。这里是为alertController的yes-handler执行的cod。代码将毫无问题地执行,但进度视图没有出现:

func initProgressView(){
    turn = 0
    let xCoord = self.view.center.x
    let yCoord = self.view.center.y + 10
    progressLabel = UILabel(frame: CGRect(x: xCoord, y: yCoord, width: 100, height: 23))
    progressLabel.text = "0 %"



    progressLabel.font = UIFont.boldSystemFontOfSize(14)
    progressView.center = self.view.center
    progressView.trackTintColor = UIColor.lightGrayColor()
    progressView.tintColor = UIColor.blueColor()
   // self.view.backgroundColor = UIColor.yellowColor()
    self.view.addSubview(progressLabel)
    self.view.addSubview(progressView)

}

这里是完整的通话顺序: initProgressView()//参见上一篇文章

然后调用importData:

func importData (source : ImportDataInterface, data : NSData, progressStep : Int) {
                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
            source.importData(data)
            dispatch_async(dispatch_get_main_queue(), {
                self.counter += progressStep
                return
            })
        })



}

最后在调用函数中: progressView.removeFromSuperview() progressLabel.removeFromSuperview()

如何刷新ViewController或者还有什么原因可能是progressView没有出现的原因。可能是,约束或自动布局问题是问题。

感谢 阿诺德

2 个答案:

答案 0 :(得分:0)

看起来progressView重叠了progressLabel,可能你需要更改最后2个字符串顺序吗?

self.view.addSubview(progressView)
self.view.addSubview(progressLabel)

答案 1 :(得分:0)

您没有提供足够的信息。你需要向我们展示一系列的电话。

在代码返回之前,iOS不会对屏幕进行更改。以下编码模式不起作用:

create progress indicator
add progress indicator to superview
start progress indicator spinning
do long-running task
stop progress indicator

相反,你要做的就是这样:

create progress indicator
add progress indicator to superview
start progress indicator spinning
invoke long-running task with a call to dispatch_after and a delay of 0:
dispatch_after(main queue, delay 0)
{
   do long running task
   stop activity indicator
}

对dispatch_after的调用会在下次代码返回时将闭包排队以在主线程上运行,并且事件循环即使延迟值为0