我在屏幕上添加了一个微调器,但它没有显示。这是我的代码暂停微调器和播放微调器
func pause() {
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
}
这是我的恢复方法
func restore() {
activityIndicator.stopAnimating()
UIApplication.sharedApplication().endIgnoringInteractionEvents()
}
我已经在类内声明了我的微调器
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
这就是我称旋转器的地方
override func viewDidLoad() {
// myarray = [""]
// var take = NSMutableArray
pause()
var query = PFQuery(className:"Questions")
query.whereKey("Level", equalTo:level)
query.whereKey("Quiz", equalTo:quiz)
query.orderByAscending("Ques")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// The find succeeded.
println("Successfully retrieved (objects.count) scores.")
var i = 0;
if let objects = objects as? [PFObject] {
for object in objects {
println(object.objectId)
let pf = object as PFObject
let name = pf["Question"] as String
ql.append(name)
if (flag1 == 0){
myarr.insert(name, atIndex: i)
i++;
}
}
}
println(myarr);
} else {
// Log details of the failure
println("Error: (error) (error.userInfo!)")
self.performSegueWithIdentifier("error", sender: self)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setBool(false,forKey:"l"+String(level)+"q"+String(quiz))
defaults.setBool(false,forKey:"l"+String(level)+"p")
}
dispatch_async(dispatch_get_main_queue(), {
self.restore()
})
}
if (flag1==0){
ques = 1
}
questions()
println(ql)
super.viewDidLoad()
//加载视图后执行任何其他设置。}
您的(可能是长时间运行的)查询作为后台任务运行,因此会立即调用restore()
。你必须改变两件事:
- 将对
restore()
的调用置于后台执行块中 - 牢记"规律":UI元素的更新必须在主线程中完成
所以,对于2。您必须将restore()
封装在主线程中:
dispatch_async(dispatch_get_main_queue(), {
restore()
})
ActivityIndicator从pause
函数开始,到restore
函数结束。在viewDidLoad
中,大部分工作由您定义的块执行,该块在后台运行。从pause
到restore
的时间将很小。restore
将在您的块完成执行之前很久运行。
如果你想让微调器一直运行到区块结束,你需要做一些类似的事情
println("Successfully retrieved (objects.count) scores.")
restore()
在你的街区里。但是,请注意,我不确定您的块在哪个线程上执行,也不确定从后台线程调用restore
是否正确。你可以试试。