动画图像时无限循环

Posted

技术标签:

【中文标题】动画图像时无限循环【英文标题】:Infinite loop when animating images 【发布时间】:2014-01-02 13:56:09 【问题描述】:

我有一些代码用于将图像淡入和淡出我的项目,它在另一个项目中时有效,但在主项目中时它给我这个错误?如果它有什么不同,我仍然在我的主项目中使用 xib,但我在它工作的测试项目中使用故事板。我已经上传了一个屏幕截图并附上了该网站的代码,希望它可能对你们更有意义。

http://alohacocoa.com/post/293647216/iphone-animation-fade-between-multiple-images

线程 1:EXC_BAD_ACCESS(代码=2,地址=0xbf7fffdc)

https://pbs.twimg.com/media/Bc-r-LdCYAABd1O.jpg:large

- (void)viewDidLoad

    [super viewDidLoad];
    backgroundImageQueue = [[NSMutableArray alloc] init];
    [backgroundImageQueue addObject:
     [UIImage imageNamed:@"image1.jpg"]];
    [backgroundImageQueue addObject:
     [UIImage imageNamed:@"image2.jpg"]];

    /* Add any more images to the queue */
    backgroundB.image = [backgroundImageQueue
                         objectAtIndex:[backgroundImageQueue count] - 1];
    [backgroundImageQueue insertObject:
     backgroundB.image atIndex:0];
    [backgroundImageQueue removeLastObject];
    backgroundA.alpha = 1.0;
    backgroundB.alpha = 0.0;
    [self nextAnimation];


-(void)nextAnimation 
    backgroundA.image = backgroundB.image;
    backgroundB.image = [backgroundImageQueue
                         objectAtIndex:[backgroundImageQueue count] - 1];
    [backgroundImageQueue insertObject:
     backgroundB.image atIndex:0];
    [backgroundImageQueue removeLastObject];
    backgroundA.alpha = 1.0;
    backgroundB.alpha = 0.0;

    [UIView beginAnimations:@"fade" context:NULL];
    [UIView setAnimationDuration:6];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:
     @selector(nextAnimation)];
    backgroundA.alpha = 0.0;
    backgroundB.alpha = 1.0;
    [UIView commitAnimations];

【问题讨论】:

这看起来像是一个无限循环,而不是错误。发布您的代码(不是指向曾经作为您的代码参考的代码的链接) 你能发布比截图更多的代码吗……很难阅读。您可以发布代码并添加详细信息以显示错误访问发生的位置......它在什么变量上? 我已经添加了代码 我删除了所有不相关的代码。问题在于动画停止后调用nextAnimation,而nextAnimation 创建另一个动画。这段代码可能在 4 年前(写博客文章时)有效,但现在不起作用。它只是创建了一个无限循环。我建议找到一种不同的方式来实现您需要的动画。 坏建议:将 [self nextAnimation];viewDidLoad 移动到 viewDidAppear:。显然,当视图尚未出现时,动画不会发生,并且会立即调用停止选择器。这导致了这个无限循环。 【参考方案1】:

好吧,你应该能够查看你的堆栈,它会说出以下两件事之一:

viewDidLoad
nextAnimation
(maybeSomethingElse)
viewDidLoad
nextAnimation
(maybeSomethingElse)
viewDidLoad
nextAnimation
(maybeSomethingElse)
viewDidLoad
nextAnimation
...

viewDidLoad
nextAnimation
(maybeSomethingElse)
nextAnimation
(maybeSomethingElse)
nextAnimation
(maybeSomethingElse)
nextAnimation
(maybeSomethingElse)
nextAnimation
...

这将为您提供有关正在发生的事情的线索,是视图被一遍又一遍地加载,还是下一个动画只是被递归调用。

但我认为@matthiasBauch 是正确的,您需要将[self nextAnimation] 移到查看周期的后期

【讨论】:

以上是关于动画图像时无限循环的主要内容,如果未能解决你的问题,请参考以下文章

在无限循环中从左到右,从右到左平移动画箭头图像

使用css关键帧创建无限循环[重复]

android两个animation无限循环怎么做?

带有下一个的jQuery动画无限循环

css3 实现动画效果,怎样使他无限循环动下去?

CSS无限循环问题