2012-12-09 32 views
2

this post作者说我们可以在切换标签页viewWillAppear后重新开始动画。iOS切换标签页后重新启动动画

我在viewWillAppearviewDidAppear中都调用了我的startAnimation,但仍然失败。

下面是我的代码的一部分。

- (void)startAnimation { 
    [UIView setAnimationsEnabled:YES]; 
    [UIView animateWithDuration:0.5f 
      delay:0.0f 
      options:UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat 
      animations:^(void){ 
       self.foreground.transform = CGAffineTransformMakeTranslation(0.0f, 5.0f); 
      } 
      completion:nil]; 
} 

动画完美地工作时,通过调用viewDidLoadstartAnimation第一次显示,但切换到其他选项卡后,它永远不会奏效。

在应用程序从后台重新启动后,即使我注册了UIApplicationWillEnterForegroundNotificationstartAnimation观察者,它也不工作。

请帮助我,我是iOS新手,非常感谢。

回答

1

只有在视图控制器第一次加载时才会调用viewDidLoad方法。

如果您希望在从其他视图控制器返回到此视图时运行动画,则应该在viewWillAppear中调用动画方法,而不是viewDidLoad。

为了让动画回到先前的值并重新生成动画,首先要将视图的变换设置为标识(将其设置为起点),然后调用您的animationWithDuration方法。

您可能会发现,更轻松地为视图的frame.origin或center属性设置动画而不是更改转换。将转换与旋转,缩放更改等结合起来时,更改转换变得复杂。另外,当transform属性不是==标识转换时,frame属性不再有效。

+0

我真的不明白你在说什么......正如我所说的,我在'viewWillAppear'中调用了'startAnimation'。我想知道为什么它不起作用。 –

+1

我终于明白你的意思是“将你的观点转换为身份”。对于那些不理解的人,我在'startAnimation'的开头添加了'self.foreground.transform = CGAffineTransformIdentity;'。这是动画工作必需的**。 –

+0

谢谢Yi Huang,你的第二条评论为我解决了这个问题。 – djskinner