0

これは私の初めての投稿であり、確かに簡単な質問であることに固執しています。ユーザーが選択した UIImage に雪が降るフレームワークを使用しています。降雪クラスのインスタンスを作成するコードは次のとおりです。

- (void)viewDidAppear:(BOOL)animated
{

    // Animate
     SnowFalling *snowfalling = [[SnowFalling alloc]
                            initWithView:self.view];
     snowfalling.hidden = NO;
     snowfalling.numbersOfFlake = 175;
     [snowfalling startAnimating];

}

この後、カスタムの戻るボタンを使用して前のビューに戻りたいと思います。

// Custom back button on toolbar.
- (IBAction)backButton:(UIBarButtonItem *)sender {
  [[self navigationController] popViewControllerAnimated:YES];
}

これは問題なく動作します。戻るボタンを押すと、「[uiview frame] メッセージが割り当て解除されたオブジェクトに送信されました」というゾンビが表示されてアプリがクラッシュします。

私が配置した場合:

  [snowfalling stopanimating];

降雪インスタンスでは、現在のビュー コントローラーでは画面上で雪が凍っているだけです。ただし、問題なく以前のコントローラーにポップできます。

私の質問は、戻るボタン (popViewControllerAnimated:YES) が押されたときにアニメーションを停止するにはどうすればよいですか?

4

2 に答える 2

2

You can stopAnimating in viewWillDisappear
Remember to set snowfalling autorelease

于 2012-11-21T03:31:25.830 に答える
0
  1. コントローラー クラスで、降雪の値を保持するプロパティを作成します。

    @property(nonatomic,retain) SnowFalling *snowfalling; // in @interface
    
    @synthesize snowfalling; // in @implementation
    
  2. viewDidAppear で、ローカル変数の代わりに、新しく作成された SnowFalling をそのプロパティに割り当てます。

  3. SnowFalling をプロパティに割り当てた直後に [解放] することを忘れないでください。メソッド全体は次のようになります。

    - (void)viewDidAppear:(BOOL)animated
    {    
        // Animate
         self.snowfalling = [[SnowFalling alloc]
                            initWithView:self.view];
         [self.snowfalling release];
         self.snowfalling.hidden = NO;
         self.snowfalling.numbersOfFlake = 175;
         [self.snowfalling startAnimating];
    }
    
  4. [backButton:] 呼び出しで

     [self.snowfalling stopanimating];
     self.snowfalling = nil;
    

popViewControllerAnimated を呼び出す前に。さらに良いことに、これらの 2 行を [viewWillDisappear:] に配置すると、常に呼び出されます。

于 2012-11-21T03:25:33.127 に答える