我一直在尝试制作一个简短的动画,它可以通过我的视图控制器调用的静态方法中途反转。这很好。
但我需要它在反向发生时执行选择器,主要是在动画的中间。方法setAnimationDidStopSelector仅在整个动画完成时触发,而不是在中间。
所以我将动画分成两个块。但是,当我这样做时,第一个动画立即完成,然后第二个动画发生。我怀疑是因为动画在同一个视图上。也许同一个视图不能有两个独立的动画块?
我已经设置了第二个具有不同动画名称的块,并且具有适当的延迟,甚至尝试了setAnimationBeginsFromCurrentState(即使它在OS 4中不鼓励),但似乎没有解决问题。
这是一些示例代码,用于了解我尝试过的方法之一。 'selector'是我需要中途调用的方法(一旦alpha透明)。
[UIView beginAnimations:name context:view];
[UIView setAnimationDuration:(duration/2)];
[UIView setAnimationDelegate:delegate];
[UIView setAnimationDidStopSelector:selector];
[view setAlpha:0.0];
[UIView commitAnimations];
name = [name stringByAppendingString:@"_reverse"];
[UIView beginAnimations:name context:view];
[UIView setAnimationDelay:(duration/2)];
[UIView setAnimationDuration:(duration/2)];
[UIView setAnimationDelegate:delegate];
[UIView setAnimationDidStopSelector:selector];
[view setAlpha:1.0];
[UIView commitAnimations];
编辑:我想避免动画'块',因为我希望代码与pre-OS4兼容。我还想保持方法静态,所以我可以将它用作库方法。
答案 0 :(得分:2)
您是否尝试将动画的第二部分放入方法中,并使用NSTimer或performSelector: withObject: afterDelay:
?
我不知道这些是否有效,但是当很多东西同时完成时,UIView动画和绘图内容往往会产生奇怪的交互。例如,您可以将一对动画设置为在单个方法中一个接一个地关闭。将它们分开,以便第一个动画不知道即将到来的动画可能会有所帮助。我确实意识到你确实在第二个上设置了延迟,但是UIViews就是这样的怪异。
编辑:尝试过,就像魅力一样。