如何推动ViewController从左到右的幻灯片效果? animation名称需要

编辑:

  • 下面gif的animation名称是什么(从右到左)?
  • 下面GIF的补充animation(从左到右)是什么animation名称?

注:我不想推一个赛格。 我想用这个animation推一个视图。


编辑2:

当我谈论animation名称时,有些人会感到困惑。 不过这里是一个animation名称的例子(名字是: UIViewAnimationTransitionFlipFromRight ):

[UIView beginAnimations: @"Showinfo"context: nil]; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:0.75]; [self.navigationController pushViewController: view animated:NO]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO]; [UIView commitAnimations]; 

我正在使用push和pop来调用堆栈上的操作。 我相信导航控制器保持导航在一个堆栈样式结构。


我正在使用导航控制器,我喜欢使用导航栏项目返回(popup)到先前视图时得到的效果。 这是一个从右到左的效果,很好,顺利。

这是一个从右到左的例子:

在这里输入图像说明

我怎样才能从右到左的效果创造补充的一个? 换句话说,当我在视图层次下去时?

这是我现在如何推视图控制器:

 [self.navigationController pushViewController:view animated:YES]; 

animation名称…好吧,没有独特的方法来调用animation,但我们试试吧

  • 从右到左滑动(呈现视图控制器滑动)
  • 从左到右滑出(视图控制器滑动被解除)

这里有很多UIViewController自定义转换的例子,例如参见: 重新创buildWWDC会话218的示例代码的github项目:使用视图控制器的自定义转换 (您感兴趣的类应该是SOLSlideTransitionAnimator ,它使各种'幻灯片'animation)

编辑

好的,你不是在讨论animation名称,而是在混合2个API,这些API是相关的:

  • UIView的animation(顺便说一句,你使用的是旧的API,较新的API与块是首选)

从Apple UIView文档

iOS 4.0及更高版本不鼓励使用此方法。 您应该使用基于块的animation方法来指定您的animation。

  • UIViewController转换(如导航推…)

现在,您正在embedded一个UINavigationController推送调用INSIDE一个UIViewanimation事务。 这是错误的

为什么? 那么,调用UINavigationController pushViewController:animated UIViewanimation被调用的pushViewController:animated结果 – 苹果公司默认animation,或者你自己的animation,如果你提供一个UIViewControllerTransitioningDelegate到你的控制器所以基本上你调用animation内的animation…

苹果已经提供了自iOS 7以来定制animation的方法,您应该使用它们提供的API。 这是我链接到的github示例代码使用的API。 如果您需要进一步介绍,请阅读Apple文档或其他资源

对于推送,您已经通过推送视图来使用正确的方式,但是他们不需要任何animation代码,只有在代码之下就足够了。

 [self.navigationController pushViewController: view animated:NO]; 

对于stream行音乐,您可以在iOS 7中提供的DetailView中添加以下代码。

 self.navigationController.interactivePopGestureRecognizer.delegate = (id)self; 

我们需要为viewController添加CATransitionanimation。 看这个,

  add <CAAnimationDelegate> in your .h file UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; ViewController *VC = [storyboard instantiateViewControllerWithIdentifier:@ViewController"]; CATransition *transition = [CATransition animation]; transition.duration = 0.45; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; transition.type = kCATransitionPush; transition.subtype = kCATransitionFromLeft; transition.delegate = self; [self.navigationController.view.layer addAnimation:transition forKey:nil]; [self.navigationController pushViewController:VC animated:NO];