iOS动画imageView消失

时间:2012-08-20 05:32:17

标签: objective-c ios core-animation core-graphics

我正在开发一个简单的单人游戏,我已经完成了所有必需的操作,但我有以下恼人的问题:

我有一个UIImageView,(显示一个硬币的图像),当点击屏幕时,动画模拟旋转。我使用以下代码执行此操作(简化为仅显示相关内容):

- (void)spinCoin:(int)times
{
    // Create a block scoped variable to store the amount of spins.
    __block int blockTimes = times;

    // Animate the coin to spin.
    [UIView animateWithDuration:0.1
                          delay:0.0
                        options: UIViewAnimationCurveEaseOut
                     animations:^{
                         coinImageView.transform = CGAffineTransformMakeScale(0.001, 1);
                     }
                     completion:^(BOOL completed){
                         [UIView animateWithDuration:0.1
                                               delay:0.0
                                             options: UIViewAnimationCurveEaseOut
                                          animations:^{
                                              coinImageView.transform = CGAffineTransformMakeScale(1, 1);
                                          }
                                          completion:^(BOOL finished){
                                              if (blockTimes < 4) {
                                                  // Spin 4 times.
                                                  [self spinCoins:blockTimes+1];
                                              }
                                          }];
                     }];
}

此方法在touchesEnded中调用。

基本上它只是将x轴上的硬币图像缩放为0,然后一旦完成,将其缩放回1(并重复4次)。

尽管有点凌乱(哦上帝拦截),但这很好用但是如果我点击主页按钮,然后重新打开应用程序,如果我点击屏幕,硬币翻转1-3次,然后imageView完全消失。控制台中没有错误等。

有谁知道造成这种情况的原因是什么? Core Graphics / Animation和应用程序是否出现问题?

3 个答案:

答案 0 :(得分:0)

试试这个:

  • 运行动画
  • 等待它完成
  • 点击顶部的电源按钮,屏幕变黑
  • 再次单击电源按钮,滑动解锁按钮
  • 点按屏幕

它现在搞砸了吗?如果是这样,那么我猜你会得到一条消息,比如“viewDidAppear”,你没想到,或者“时代”被重置 - 就像那样。

我在我的应用中使用了大量的核心图形和动画,并且从未遇到过与iOS系统相关的问题。确保你的代码中的某些东西与你得到的一些消息相关,而不是期待。

答案 1 :(得分:0)

我不确定为什么你的图像视图正在消失,但你的递归代码没有意义。如果blockTimes参数是&lt; 4,则递增它并递归调用该方法。

我会在方法条目中,在两个动画块中添加日志语句,并在完成方法中添加日志语句以查看正在进行的操作。

答案 2 :(得分:0)

问题在于,由于UIImage引用我将硬币图像设置为“弱”,这似乎导致图像在应用程序进入后台后被释放。

将属性更改为“strong”可解决问题。

感谢大家的帮助:)。