@IBAction func getData(sender: AnyObject) {
activitySpinner.startAnimating();
activitySpinner.hidden = false;
edisonArray[0].EdisonLocation = edison1Location.text!;
edisonArray[1].EdisonLocation = edison2Location.text!;
edisonArray[2].EdisonLocation = edison3Location.text!;
edisonArray[3].EdisonLocation = edison4Location.text!;
edisonArray[4].EdisonLocation = edison5Location.text!;
edisonArray[0].EdisonComment = edison1Comment.text!;
edisonArray[1].EdisonComment = edison2Comment.text!;
edisonArray[2].EdisonComment = edison3Comment.text!;
edisonArray[3].EdisonComment = edison4Comment.text!;
edisonArray[4].EdisonComment = edison5Comment.text!;
for(var i = 0; i < edisonArray.count ; i++){
var edison = edisonArray[i];
edison = startDataCollection(edison);
edisonArray[i] = edison;
}
edison1Data.text = "True"
edison2Data.text = "True"
edison3Data.text = "True"
edison4Data.text = "True"
edison5Data.text = "True"
if(!edisonArray[0].EdisonBool) { edison1Data.text = "False" }
if(!edisonArray[1].EdisonBool) { edison1Data.text = "False" }
if(!edisonArray[2].EdisonBool) { edison1Data.text = "False" }
if(!edisonArray[3].EdisonBool) { edison1Data.text = "False" }
if(!edisonArray[4].EdisonBool) { edison1Data.text = "False" }
activitySpinner.stopAnimating();
activitySpinner.hidden = true;
}
上面的代码适用于我正在进行的项目。每次运行此代码时,我都试图让活动微调器工作,微调器不是动画。有人可以帮我这个。
activitySpinner是UIActivityIndicatorView的对象
答案 0 :(得分:1)
您正在主线程中运行您的工作。这将阻止动画正常工作。此外,您在runloop的同一帧上调用start和stop动画。这也可能导致它没有动画。
最后,您无法更新后台线程的用户界面。因此,如果您正在使用UIKit控件,则需要在主线程上执行此操作。
Matt指出了在主线程上再次调用的正确方法。但我怀疑整个工作流程看起来像这样
activitySpinner.startAnimating();
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);())
{
//do any slow operations here in the background queue
doProcess();
//move back to the ui thread
dispatch_async(dispatch_get_main_queue())
{
//update any user interface info based on the above processing
updateUi();
activitySpinner.stopAnimating();
}
}
答案 1 :(得分:0)
像这样:
@IBAction func getData(sender: AnyObject) {
activitySpinner.startAnimating();
dispatch_async(dispatch_get_main_queue()) { // <--
activitySpinner.hidden = false;
edisonArray[0].EdisonLocation = edison1Location.text!;
// ...
activitySpinner.stopAnimating();
activitySpinner.hidden = true;
}
}
但请注意,这不会使您的代码正确。如果startDataCollection
非常耗时,则不应在主线程上执行此操作。但是,这是另一个问题。