【问题标题】:How to push ViewController with slide effect from left to right? Animation name required如何从左到右推动具有滑动效果的 ViewController?需要动画名称
【发布时间】:2015-05-21 13:20:59
【问题描述】:

编辑:

  • 下面的 gif 动画名称是什么(从右到左)?
  • 下图(从左到右)的补充动画的动画名称是什么?

注意:我不想推动转场。我想用那个动画推送一个视图。


编辑 2:

当我谈到动画名称时,有些人会感到困惑。然而,这里是一个有效的动画名称示例(名称为: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 来调用堆栈上的操作。我相信导航控制器将导航保持在堆栈样式结构中。


我正在使用导航控制器,我喜欢使用导航栏项返回(弹出)到上一个视图时获得的效果。从右到左的效果很好,很流畅。

这是一个从右到左效果的示例

如何创建互补的从右到左的效果? 换句话说,当我在视图层次结构中下降时?

这就是我目前推送视图控制器的方式:

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

【问题讨论】:

  • 你为什么建议这个?
  • 如果我理解得很好:你想要在“push”上播放“pop”动画?
  • 这些动画的名称是什么?
  • @Vinzz 我只是想了解上面 gif 中效果的动画名称是什么,这样我就可以搜索它及其补充,并在我的代码中随意使用它。
  • @MuhammadAdnan 我不想推动转场。我想用那个动画推送一个视图。

标签: ios objective-c uiviewcontroller slide


【解决方案1】:

我们需要为 viewController 添加 CATransition 动画。看看这个,

    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];

【讨论】:

    【解决方案2】:

    动画名称...嗯,没有唯一的调用动画的方法,但让我们试试

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

    这里有很多 UIViewController 自定义过渡的示例,例如:the github project that re-created sample code for WWDC Session 218: Custom Transitions Using View Controllers(您感兴趣的类应该是SOLSlideTransitionAnimator,它可以启用各种“幻灯片”动画)

    编辑

    好的,您不是在谈论动画名称,而是在混合 2 个 API,它们在某种程度上是相关的:

    • UIView 动画(顺便说一下,您使用的是 OLD API,最好使用带有 Blocks 的较新 API)

    来自Apple UIView documentation

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

    • UIViewController 转换(如导航推送...)

    现在,您将在 UIView 动画事务中嵌入 UINavigationController 推送调用。这是错误

    为什么?好吧,调用UINavigationController pushViewController:animated 会导致调用UIView 动画-Apple 默认动画,或者如果您向控制器提供UIViewControllerTransitioningDelegate,则您拥有动画所以基本上您是在动画中调用动画...

    Apple 从 iOS 7 开始就提供了自定义动画的方法,您应该使用他们提供的 API。这是我链接到的 github 示例代码使用的 API。如果您需要进一步介绍,请阅读 Apple 文档,or other resources

    【讨论】:

    • 请参阅我的 EDIT 2 以了解有关“动画名称”的说明
    【解决方案3】:

    对于Push,您已经通过推送视图使用了正确的方式,但是它们不需要您身边的任何动画代码,只需以下代码就足够了。

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

    对于 pop,您可以在 DetailView 中添加以下代码,该代码可从 iOS 7 获得。

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

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 2015-09-27
      • 2021-07-05
      • 2011-10-02
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      相关资源
      最近更新 更多