微调器在 swift 中不工作
Spinner not working in swift
我在屏幕上添加了一个微调器,但它没有显示。这是我的代码暂停微调器并播放微调器
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()
}
我已经在 class
中声明了我的微调器
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()
// 加载视图后进行任何其他设置。
}
您的 ActivityIndicator 以 pause
函数开始,以 restore
函数结束。在 viewDidLoad
中,大部分工作由您定义的块执行,该块 运行 在后台执行。从 pause
到 restore
的时间会很短。 restore
将 运行 在你的块完成执行之前很久。
如果您希望微调器 运行 直到方块结束,您需要执行类似
的操作
println("Successfully retrieved \(objects.count) scores.")
restore()
在你的街区内。但是,请注意,我不确定您的代码块在哪个线程上执行,而且我不确定从后台线程调用 restore
是否正确。你可以试试。
您的(可能很长 运行)查询作为后台任务运行,因此您的 restore()
将立即被调用。你必须改变两件事:
- 将对
restore()
的调用放在后台执行块中
- 牢记"The Law":对UI 元素的更新必须在主线程中完成
所以,对于 2. 你必须在主线程中包装 restore()
:
dispatch_async(dispatch_get_main_queue(), {
restore()
})
我在屏幕上添加了一个微调器,但它没有显示。这是我的代码暂停微调器并播放微调器
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()
}
我已经在 class
中声明了我的微调器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()
// 加载视图后进行任何其他设置。 }
您的 ActivityIndicator 以 pause
函数开始,以 restore
函数结束。在 viewDidLoad
中,大部分工作由您定义的块执行,该块 运行 在后台执行。从 pause
到 restore
的时间会很短。 restore
将 运行 在你的块完成执行之前很久。
如果您希望微调器 运行 直到方块结束,您需要执行类似
的操作println("Successfully retrieved \(objects.count) scores.")
restore()
在你的街区内。但是,请注意,我不确定您的代码块在哪个线程上执行,而且我不确定从后台线程调用 restore
是否正确。你可以试试。
您的(可能很长 运行)查询作为后台任务运行,因此您的 restore()
将立即被调用。你必须改变两件事:
- 将对
restore()
的调用放在后台执行块中 - 牢记"The Law":对UI 元素的更新必须在主线程中完成
所以,对于 2. 你必须在主线程中包装 restore()
:
dispatch_async(dispatch_get_main_queue(), {
restore()
})