我正在构建一个 iOS 应用程序,其中我需要通过选择颜色来将视图的 backgroundColor 设置为动画。在我的 viewDidLoad 方法中,我基本上是使用以下内容触发一系列 UIView 动画。
-(void) beginFirstStageBackgroundAnimation
{
[UIView animateWithDuration: 3.0f
delay: 3.0f
options: UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.view.backgroundColor = [UIColor colorWithRed: 251./255 green:203./255 blue:147./255 alpha:1.0];
}
completion:^(BOOL finished){
[self secondStageBackgroundAnimation];
}
];
}
完成处理程序触发包含下一种颜色的第二个方法....
-(void) secondStageBackgroundAnimation
{
[UIView animateWithDuration: 3.0f
delay: 3.0f
options: UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.view.backgroundColor = [UIColor colorWithRed:251./255 green:224./255 blue:96./255 alpha:1.0];
}
completion:^(BOOL finished){
[self thirdStageBackgroundAnimation];
}
];
}
依此类推……直到在第七个动画中我调用[self beginFirstStageBackgroundAnimation];
完成以再次开始该过程。
当我使用后退按钮离开视图时,在 viewDidDisappear 中或当显示器上的计时器结束时,我会运行[self.view.layer removeAllAnimations];
以完全摆脱动画。但是,该应用程序完全按预期运行和工作,但在离开视图并运行一个整体后似乎崩溃了,虽然我不知道为什么它似乎与这个动画链有关。
是否有更好的解决方案可以每 3 秒以 3 秒的延迟为视图的 backgroundColor 设置动画?
并且[self.view.layer removeAllAnimations];
真的做我想做的事吗?
编辑:我离开视图的代码如下:
-(void) backBtnPressed:(id)sender
{
[self stopAudio]; // stop audio that is playing.
[self.view.layer removeAllAnimations]; // remove all animations?
[self.navigationController popViewControllerAnimated: YES]; // pop view from stack
}