我正在使用导航控制器,我正在尝试在新的View Controller推送之前运行动画。为此,我从UINavigationController委托中捕获事件并运行动画。也就是说,显然iOS动画意味着异步运行,因此方法返回,我的动画与标准推送动画同时运行。有关如何解决这个问题的想法吗?
情况如下:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (animated)
{
[UIView animateWithDuration:kGFDefaultAnimationDuration
delay:0.0
options:UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction
animations:^{
// Set up animations here...
}
completion:^(BOOL finished) {
}];
}
}
换句话说,我想从完成块中返回navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
。
答案 0 :(得分:0)
你算一下'事件'是什么?如果它是一个方法,那么你可以把它称为[self method()];你在哪里写'//在这里设置动画......'然后在完成块中推动你的视图控制器。或者,你可以简单地编写你的UIView动画代码并使用setAnimationDidStopSelector
并只设置你的方法来推动视图控制器作为选择器。确保您还通过[UIView setAnimationDelegate:self];
将视图设置为委托。这样,推送视图仅在动画完成后发生。如果您知道动画持续时间,也可以查看-(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
,并设置延迟以在动画完成之前执行推送视图控制器几分之一秒。调整它以获得最佳效果。