使用 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.
我正在显示一个 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.