0

我的应用程序中有一些弹跳箭头,它们只是上下移动 10 秒钟,以建议单击按钮。当页面第一次加载时它们工作正常。当我经过这个视图然后返回视图时,箭头在那里,但它们不动。然而,它们确实会在十秒后消失。

这是控制在 ViewDidLoad 中实现的移动的代码。

//Makes my images move up and down

CABasicAnimation *hover = [CABasicAnimation animationWithKeyPath:@"position"];
hover.additive = YES;
hover.fromValue = [NSValue valueWithCGPoint:CGPointZero];
hover.toValue = [NSValue valueWithCGPoint:CGPointMake(0.0, -20.0)]; 
hover.autoreverses = YES; 
hover.duration = 0.8; 
hover.repeatCount = 30; 

[_imageView.layer addAnimation:hover forKey:@"myHoverAnimation"];
[_imageViewTwo.layer addAnimation:hover forKey:@"myHoverAnimation"];
[_imageViewThree.layer addAnimation:hover forKey:@"myHoverAnimation"];



// Delay execution of my block for 10 seconds.

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
    _imageView.alpha = 0.0;
    _imageViewTwo.alpha = 0.0;
    _imageViewThree.alpha = 0.0;
    _arrowLabel.text = @"";

});

这只发生在我使用 segue 返回页面时。

当我使用dismissViewControllerAnimated 时,我没有这个问题。

导致这种情况发生的区别是什么?

4

1 回答 1

2

将此动画代码移动到 viewDidAppear 以获得您正在寻找的功能。

viewDidLoad仅(通常)在视图控制器的生命周期内调用一次,当它首次加载到内存中时。如果您从模态上下文中关闭此视图控制器,它(应该)从内存中完全删除,并在您下次呈现它时重新加载。

如果您从另一个视图控制器返回它,它可能仍然在内存中,只是不可见,因此viewDidLoad不会被调用。一个常见的示例是,如果您将 ViewControllerB 推到包含此动画的 ViewControllerA 之上,则 ViewControllerA 仍在内存中。它是 NavigationController 的一部分viewControllers。当您弹出 ViewControllerB 并返回到 ViewControllerA 时,它会出现在屏幕上,但不会重新加载。

于 2013-10-08T15:37:55.283 回答