我正在开发一个简单的单人游戏,我已经完成了所有必需的操作,但我有以下恼人的问题:
我有一个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和应用程序是否出现问题?
答案 0 :(得分:0)
试试这个:
它现在搞砸了吗?如果是这样,那么我猜你会得到一条消息,比如“viewDidAppear”,你没想到,或者“时代”被重置 - 就像那样。
我在我的应用中使用了大量的核心图形和动画,并且从未遇到过与iOS系统相关的问题。确保你的代码中的某些东西与你得到的一些消息相关,而不是期待。
答案 1 :(得分:0)
我不确定为什么你的图像视图正在消失,但你的递归代码没有意义。如果blockTimes参数是&lt; 4,则递增它并递归调用该方法。
我会在方法条目中,在两个动画块中添加日志语句,并在完成方法中添加日志语句以查看正在进行的操作。
答案 2 :(得分:0)
问题在于,由于UIImage引用我将硬币图像设置为“弱”,这似乎导致图像在应用程序进入后台后被释放。
将属性更改为“strong”可解决问题。
感谢大家的帮助:)。