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] message sent to deallocated object”

如果我放置:

  [snowfalling stopanimating];

在降雪的实例中,当前视图控制器只是将雪冻结在屏幕上。但它会让我毫无问题地弹出到以前的控制器。

那么我的问题是,当点击后退按钮 (popViewControllerAnimated:YES) 时如何停止动画?

4

2 回答 2

2

你可以stopAnimatingviewWillDisappear
记得设置降雪自动释放

于 2012-11-21T03:31:25.830 回答
0
  1. 在你的控制器类中创建一个属性来保存降雪的值:

    @property(nonatomic,retain) SnowFalling *snowfalling; // in @interface
    
    @synthesize snowfalling; // in @implementation
    
  2. 在您的 viewDidAppear 中:将新创建的 SnowFalling 分配给该属性而不是局部变量。

  3. 请记住在将 SnowFalling 分配给属性后立即 [release] 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 之前。更好的是,将这两行放在 [viewWillDisappear:] 中,这样它们总是会被调用。

于 2012-11-21T03:25:33.127 回答