使用 Swift ProgressView 未显示在视图控制器上

ProgressView not showing on View Controller using Swift

我正在显示一个 alertController,如果用户单击“是”,应该显示一个 ProgressView,但不幸的是 Progressview 和标签没有出现。我怎样才能刷新我的 ViewController。这里是为 alertController 的 yes-handler 执行的 cod。代码可以正常执行,但是progressview没有出现:

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() //查看前面的post

然后调用 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 未出现的原因。会不会是约束或自动布局问题。

谢谢 阿诺德

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

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

您提供的信息还不够。您需要向我们展示通话顺序。

iOS 在您的代码 returns 之前不会将更改呈现到屏幕上。以下编码模式将不起作用:

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 会在下一次您的代码 returns 和事件循环 时将您的闭包排队到主线程上的 运行 即使延迟值为 0.