Xcode 用于长计算过程的UIActivityIndicatorView

Xcode 用于长计算过程的UIActivityIndicatorView,xcode,uiactivityindicatorview,Xcode,Uiactivityindicatorview,我有一个计算过程,需要花费相当多的时间来执行,因此UIActivityIndicatorView似乎是合适的。我有一个启动计算的按钮 我试着把命令[calactivity startAnimating]在计算结束时显示,但没有显示任何内容 接下来,我创建了一个新的iAction,通过调用计算iAction来包含启动和停止,并创建了一个虚拟for循环,只是为了让startAnimating有一点机会在两者之间开始。这也不行 骨架代码如下所示: - (IBAction)computeNow:(id)

我有一个计算过程,需要花费相当多的时间来执行,因此
UIActivityIndicatorView
似乎是合适的。我有一个启动计算的按钮

我试着把命令
[calactivity startAnimating]iAction
[CalActivity stopAnimating]中计算开始时的code>在计算结束时显示,但没有显示任何内容

接下来,我创建了一个新的
iAction
,通过调用计算
iAction
来包含启动和停止,并创建了一个虚拟for循环,只是为了让startAnimating有一点机会在两者之间开始。这也不行

骨架代码如下所示:

- (IBAction)computeNow:(id)sender {
    [calcActivity startAnimating];
    for (int i=0; i<1000; ++i) { }
    [self calcStats];
    [calcActivity stopAnimating];
    }

- (IBAction)calcStats {
    // do lots of calculations here
    return;
    }
- (IBAction)computeNow {
    [calcActivity startAnimating];
    [self performSelector:@selector(calcStats) withObject:nil afterDelay:0];
    return;
}

- (void) calcStats {
    // Lots of tedious calculations
    [calcActivity stopAnimating];
}
-(iAction)计算新:(id)发送方{
[活性启动激活];

对于(int i=0;iOk),正如我所评论的,你不应该在你的主线程中执行复杂的计算。这不仅会导致像你这样的情况,你的应用程序也可能被商店拒绝

现在,UIActivityIndicatorView没有更新的原因是,UI实际上没有更新自身,例如,当您调用
[CalActivity startAnimating];
相反,它会在代码运行完毕后进行更新。在您的情况下,这意味着
开始动画化
停止动画化
会立即被调用,因此不会真正发生任何事情


因此,“简单”的解决方案是:开始一个新的线程,使用其中一个或更好的方法。

谢谢你的提示,Phlibbo。我对这个游戏不熟悉,感谢你的帮助。我不理解你提供的链接上的所有信息,但它确实促使我进一步搜索示例。我发现了一个很好的方法。IBAction“computeNow”是触发式的d。代码现在如下所示:

- (IBAction)computeNow:(id)sender {
    [calcActivity startAnimating];
    for (int i=0; i<1000; ++i) { }
    [self calcStats];
    [calcActivity stopAnimating];
    }

- (IBAction)calcStats {
    // do lots of calculations here
    return;
    }
- (IBAction)computeNow {
    [calcActivity startAnimating];
    [self performSelector:@selector(calcStats) withObject:nil afterDelay:0];
    return;
}

- (void) calcStats {
    // Lots of tedious calculations
    [calcActivity stopAnimating];
}

你不应该在你的主线程中进行长时间的计算。你应该编辑你的帖子,而不是在回答中“评论”。此外,如果有帮助,请接受我的回答:)