0

すべてUIActivityIndicatorのビューの上でアニメーションを開始する があります。彼がアニメーションを開始した直後に、この現在のビューの親ビューがポップされます。彼がアニメートした後、ブロックを使用して別のクラスを呼び出し、いくつかのサーバー コマンドを実行します。

私の問題は、他のクラスでサーバーからの応答を取得しているが、 UIActivityIndicator彼が他のクラスにいるため、停止するように指示できないことです。(Application Delegate には何も実装したくないと言わざるを得ません)。

サーバー クラスでは、応答を取得した後に がUIAlertView表示されますが、UIAlertViewはサーバー クラス内に実装されています。UIActivityIndicatorそこはやめてほしいところです。

私はそれをよく理解しているといいのですが、そうでない場合は教えてください。

ありがとうございました。

- (void)buttonPressed:(id)sender
{
    UIView * darkView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
    darkView.backgroundColor = [UIColor blackColor];
    darkView.alpha = 0.5f;

    UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [darkView addSubview:activityIndicator];
    activityIndicator.center = darkView.center;

    [activityIndicator startAnimating];
    [[UIApplication sharedApplication].keyWindow addSubview:darkView];

    // Inside this class (ShareByEmail) there is a UIAlertView that should stop the 
    // animation that already running right now.
    ShareByEmail *sbe = [[ShareByEmail alloc]init];
    [sbe share];

    [self.navigationController popViewControllerAnimated:YES];
}
4

1 に答える 1

1

1 つのオプションは、UIActivityIndicatorシングルトン オブジェクトとして保持し、プロジェクト内のどこからでも使用することです。別のオプションは、 でこれを試すことnotificationsです。このアクティビティ インジケーターにオブザーバーを追加および削除する必要があり、リクエストが起動/実行されるたびに、アクティビティ インジケーターを開始/停止する通知を投稿する必要があります。

アップデート:

あなたの場合、アクティビティインジケーターにメモリを割り当てた直後に[[NSNotificationCenter defaultCenter] addObserver:activityIndicator selector:@selector(startAnimating) name:@"startActivityIndicator" object:nil]設定できます。[[NSNotificationCenter defaultCenter] addObserver:activityIndicator selector:@selector(stopAnimating) name:@"stopActivityIndicator" object:nil]開始または停止するときはいつでも、[[NSNotificationCenter defaultCenter] postNotificationName:@"startActivityIndicator" object:nil]またはを呼び出します[[NSNotificationCenter defaultCenter] postNotificationName:@"stopActivityIndicator" object:nil]。活動インジケータが解放されていないことを確認してください。アクティビティ インジケーターをこのクラスのクラス レベル変数として宣言し、init メソッドなどでメモリを割り当てることをお勧めします。ボタンを押した方法では、単に使用できます[darkView addSubview:activityIndicator];

于 2012-10-25T09:12:14.270 に答える