3

App Delegateからアクティビティインジケーターを管理しようとしています。そうすれば、どのビューでもインジケーターを表示できます。だから、私はそれをサブビューとして'window'に追加し、次のように開始/停止します:

- (void)didStartActivity
{
    if( activityIndicator == nil ) {
        activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        activityIndicator.hidesWhenStopped = YES;
        activityIndicator.center = window.center;
        activityIndicator.transform = CGAffineTransformScale(CGAffineTransformIdentity, 6.0, 6.0);
    }
    NSLog(@"%s: starting the activityIndicator", __FUNCTION__);
    [window addSubview:activityIndicator];
    [activityIndicator startAnimating];
}

ログメッセージが表示されるので、コードが呼び出されていることがわかります。インジケーターは中央にあり、デフォルトサイズの6倍です。ただし、stopAnimatingは停止していません。私が結論付けることができる唯一のことは、それが現在のViewControllerで実行される必要があるということです。

- (void)didStopActivity
{
    NSLog(@"%s: stopping the activityIndicator", __FUNCTION__);
    [activityIndicator stopAnimating];
    [activityIndicator removeFromSuperview];
}
4

5 に答える 5

8

バックグラウンドスレッドからこれを実行しようとしていますか?簡単で決定的なテストは、次を追加することです。

NSLog(@"thread: %@", [NSThread currentThread]);
于 2010-12-12T22:39:42.087 に答える
0

activityIndicatorあなたがそうではないかどうかを確認してくださいnil

NSLog(@"activityIndicator: %@", activityIndicator);
于 2010-01-30T18:51:07.477 に答える
0

わかった。私は実験を行いましたが、確かに、viewcontrollerのビューのサブビューとしてアクティビティインジケーターを追加すると、問題なく機能しました。ただし、その新しいシンプトンプロジェクトを使用して、ウィンドウのサブビューとして試してみると、それも機能しました。明らかに私のコードのバグであり、さらに調査する必要があります。

デバッグの概念が私のソリューションに役立ったので、両方のEimantaに答えを与えます。

于 2010-01-31T00:31:59.453 に答える
0

ログがnilの場合は、次のようにします。

「.h」で宣言します:

__strong UIActivityIndicatorView *activityIndicator

__strong ARCを回避すると、activityIndi​​catorを削除して停止できます。

[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
于 2013-03-13T13:50:50.610 に答える
0

スーパービューに複数回追加する場合は機能しません。

入れてみてください

[superView addSubview:activityIndicator];

if( activityIndicator == nil ) {

調子

于 2016-03-24T16:10:14.800 に答える