0

我正在为一个单人作业制作一个简单的游戏,并且我已经完成了所有要求,但是我遇到了以下令人恼火的问题:

我有一个 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 完全消失。控制台中没有错误等。

有谁知道这可能是什么原因造成的?核心图形/动画和应用程序移出后台是否存在问题?

4

3 回答 3

0

试试这个:

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

现在乱了吗?如果是这样,那么我猜你收到了一条你没想到的消息,比如“viewDidAppear”,或者“times”被重置了——类似的东西。

我在我的应用程序中使用了大量的核心图形和动画,并且从未遇到过与 iOS 系统相关的问题。可以肯定的是,您的代码中的某些内容与您收到但未预料到的某些消息有关。

于 2012-08-20T13:03:10.813 回答
0

我不确定为什么您的图像视图会消失,但是您的递归代码没有意义。如果 blockTimes 参数小于 4,则 INCREMENT 它并递归调用该方法。

我会在方法条目、两个动画块和完成方法中添加日志语句以查看发生了什么。

于 2012-08-20T13:06:44.747 回答
0

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

将属性更改为“强”解决了问题。

感谢你的帮助 :)。

于 2012-09-25T02:09:26.627 回答