なぜUIIndicatorは動かないのですか?

私は私のアプリでUIActivityIndi​​catorを使用します。私は次のようにコードを書いています:

-(void)startSpinner {

    spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    spinner.hidden = NO;
    spinner.frame = CGRectMake(137, 160, 50, 50);
    [spinner setHidesWhenStopped:YES];
    [self.view addSubview:spinner];
    [self.view bringSubviewToFront:spinner];
    [spinner startAnimating];
}

私はこのメソッドをUIButtonのアクションイベントで呼びます

インジケータを削除するには、次のようにコードを記述します。

-(void)stopSpinner {

    [spinner stopAnimating];
    [spinner removeFromSuperview];
    [spinner release];
}

ボタンをクリックするとインジケータが表示されますが、私がコールすると - (void)stopSpinnerメソッドが表示されます 表示が消えることはありません。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self stopSpinner];

}

コードをデバッグしても、コントロールがstopSpinner()にも移動することがわかりました。

私は何が問題なのか理解できません。

PLZヘルプ...

0
Spinnerを停止するための遅延を追加してみてください
追加された 著者 Sunil Pandey,
Interface BuilderでUIIndicatorを作成し、同じ状況になるかどうかを確認してください。
追加された 著者 SimplyKiwi,
これらのメソッドはすべて同じクラスの同じインスタンスにありますか?ここで操作の順序を考えてもらえますか?私はあなたがスピナーを始める方法を描写することはできませんし、同じviewcontrollerのviewwillappearメソッドで停止させたいのですか?
追加された 著者 jrturton,
スピナーの起動時と停止時のアドレスを確認してください。私は、あなたが stopSpinner メソッドの spinner 変数がnullであると感じました。
追加された 著者 Michael Dautermann,
なぜあなたはviewWillAppearのスピナーを止めていますか?
追加された 著者 NJones,

1 答え

いつでも UIActivityIndi​​catorView を作成せずに作成するので、 startSpinner でリークする可能性があります。次のようにメソッドを変更します。

-(void)startSpinner {
    if (spinner){
        [spinner removeFromSuperview];
        [spinner release]; spinner = nil;
    }
    spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    spinner.frame = CGRectMake(137, 160, 50, 50);
    [spinner setHidesWhenStopped:YES];
    [self.view addSubview:spinner];
    [spinner startAnimating];
}

For stopping animation assign stopSpinner for another UIButton action. Cos viewWillAppear will fired early then you tap on any button.
ps. maybe you mean viewWillDisappear?

3
追加された