【问题标题】:Why does the view disappear after an animation?为什么动画后视图会消失?
【发布时间】:2014-09-30 04:42:40
【问题描述】:

我一直在尝试使用此代码为图像设置动画。

  - (void)viewDidLoad
{

    dice.animationImages = [NSArray arrayWithObjects:
                            [UIImage imageNamed:@"image1.png"],
                            [UIImage imageNamed:@"image2.png"],
                            [UIImage imageNamed:@"image3.png"], nil];


    [dice setAnimationRepeatCount:3];
    dice.animationDuration = 1;


    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

然后我有一个按钮可以播放动画。

-(IBAction) animate:(id)sender {

[dice startAnimating];
}

一切都很完美。动画播放 3 次,每次持续时间为 1 秒。然而,动画播放 3 次后,骰子图像视图就从屏幕上消失了。如何阻止这种情况发生,以使图像不会消失并且我可以对图像视图执行其他操作?

【问题讨论】:

  • @MarmiK NSArray 不能保持零,它只是表示参数结束
  • 我认为您的代码没有任何问题。问题必须在其他代码中。
  • dice.animationRepeatCount = 0; 这将使动画计数无限...在您的情况下,动画只有 3 次。
  • 真的没有其他代码。万事俱备
  • 是的,MarmiK 我不希望它无限期地播放。我有点希望它看起来像骰子在旋转并落在最终图像上,但是骰子在播放 3 次后消失了

标签: ios objective-c cocoa-touch animation uiimageview


【解决方案1】:

你在任何地方设置dice.image吗?动画与 imageView 包含的图像不同,并且“在图像前面播放”然后被删除。我推荐使用UIImageViewstartAnimatingWithCompletionBlock方法:

- (void) viewDidload {

    dice.image = [UIImage imageNamed:@"image3.png"]; // big assumption on my part
                                                     // the assumption is that this is the image you want
                                                     // after animating

    dice.animationImages = [NSArray arrayWithObjects:
                           [UIImage imageNamed:@"image1.png"],
                           [UIImage imageNamed:@"image2.png"],
                           [UIImage imageNamed:@"image3.png"], nil];

    [dice setAnimationRepeatCount:3];
    dice.animationDuration = 1

    [super viewDidLoad];
}

“块”是一段或多行代码,等待动画完成后再执行。如果您事先设置图像,它将在动画运行时出现在动画“后面”,可能不是您想要的。

【讨论】:

  • 好吧,你说的很有道理,但是当我将该代码放入 viewDidLoad 时,它给了我一个与 startAnimatingWithCompletionBlock 相关的错误:
  • 这是“'UIImageView'没有可见的@interface声明选择器'startAnimatingWithCompletionBlock'”。你是什​​么意思我的大假设。谢谢。是的,我试图了解随机数,所以我制作了一个随机数并根据该数字设置视图。例如 if(randomInterger == 1) { dice.image = [imageNamed:@"image1.png"]};该应用程序运行良好并显示随机骰子面,但后来我决定让它看起来像是在旋转并降落在随机数上,所以我将动画设置为在 if 语句上方播放,但骰子消失了。
  • 哎呀,我的错!我在 UIImageView 上使用一个类别。我的脸是红色的,答案已编辑。那么,你在哪里设置dice.image?在[dice startAnimating]之前?
  • 不,我是在 [dice startAnimating] 之后设置的。刚才我在 if 语句之后设置了它,它就像魅力一样,它旋转了一段时间,然后每次显示一个随机数。太感谢了。我的逻辑是,首先我会运行动画,然后在它运行后立即将图像设置为随机骰子图片。但我想不会。你能告诉我为什么我必须在之前而不是之后设置 dice.image。谢谢
  • @Supert165 我不确定为什么当您以其他方式尝试而没有实际看到该代码时没有设置图像;可能代码没有执行(在未到达的部分代码中),或者文件名拼写错误(UIImage/UIImageView 不会抱怨,只是无法加载图像),&c。
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多