【问题标题】:How to change the animation direction of ViewController on PopViewController如何在 PopViewController 上改变 ViewController 的动画方向
【发布时间】:2014-02-10 05:42:26
【问题描述】:

是否可以改变 ViewContoller Pop 动画的方向。
现在,当我们按下 VC 时,它会显示动画 Slide Left-to-Right 和 Pop Right-to-Left。
但我想要在 Pop VC 上从左到右滑动动画。

我尝试使用UIViewAnimationTransition

[UIView  beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[UIView commitAnimations];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:0.375];
[self.navigationController popViewControllerAnimated:NO];
[UIView commitAnimations];

但它没有我需要的从左到右滑动的动画。这是我得到的动画

typedef enum {
   UIViewAnimationTransitionNone,
   UIViewAnimationTransitionFlipFromLeft,
   UIViewAnimationTransitionFlipFromRight,
   UIViewAnimationTransitionCurlUp,
   UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;

【问题讨论】:

  • 尝试:- 首先显示动画并在动画完成时弹出 Viewcontroller。
  • 您找到解决方案了吗?
  • @Crashalot ,我已经为我使用的代码添加了答案,请检查。

标签: ios uiviewcontroller uinavigationcontroller


【解决方案1】:

干杯,这里是 swift 3.0 ~ 4.0 版本。

let transition = CATransition()
transition.duration = 0.4
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromRight
self.navigationController?.view.layer.add(transition, forKey: kCATransition)
self.navigationController?.popViewController(animated: false)

【讨论】:

    【解决方案2】:

    我使用了以下代码..

    将此添加到didFinishLaunchingWithOptions

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        //This line of code needed so you will not see the back window when its pop, match it with your app design.
        self.window.backgroundColor = [UIColor whiteColor];
        return YES;
    }
    

    在您的 POP 代码中添加此代码,

    CATransition* transition = [CATransition animation];
    transition.duration = 0.4f;
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromRight;
    [self.navigationController.view.layer addAnimation:transition
                                                forKey:kCATransition];
    [self.navigationController popViewControllerAnimated:NO];
    

    查看此 GIF 中的结果,
    http://www.giphy.com/gifs/l2YSeBELE1phMEd5S

    【讨论】:

      【解决方案3】:

      您可以使用[UIView beginAnimations:] 处理您的情况。 setTransitionStyle 根据您的需要。检查苹果文档中的可用UIViewAnimationTransitionStyle 参考此https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html

      【讨论】:

      • 感谢您的回复。实际上我已经尝试过了,但它没有我需要的从左到右滑动的动画。
      • 我使用了这个stackoverflow.com/questions/2942221/… 代码,它很好,但不包含我需要的动画。
      【解决方案4】:
      let story = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController")  as! SecondViewController
      
          UIView.beginAnimations("", context: nil)
          UIView.setAnimationDuration(1.0)
          UIView.setAnimationCurve(UIViewAnimationCurve.easeInOut)
          UIView.setAnimationTransition(UIViewAnimationTransition.flipFromRight, for: (self.navigationController?.view)!, cache: false)
          self.navigationController?.pushViewController(story, animated: true)
          UIView.commitAnimations()
      

      【讨论】:

        【解决方案5】:

        你可以在动画之后使用完成块来完成这项工作:

        UIView.animate(withDuration: 0.75, animations: { () -> Void in
        
             UIView.setAnimationCurve(UIViewAnimationCurve.easeInOut)
             self.navigationController?.popViewController(animated: true)
        
        })
        

        【讨论】:

          【解决方案6】:
           [UIView animateWithDuration:0.5f animations:^{
                  self.myButton.transform = CGAffineTransformMakeScale(3, 3);
              } completion:^(BOOL finished){}];
              // for zoom out
              [UIView animateWithDuration:0.5f animations:^{
          
                  self.myButton.transform = CGAffineTransformMakeScale(1, 1);
              }completion:^(BOOL finished){}];
              //View ANimation
              [UIView transitionWithView: self.navigationController.view
                                duration: 0.5
                                 options: UIViewAnimationOptionTransitionCurlDown
                              animations: ^{
          
                                  [self.navigationController popToRootViewControllerAnimated:YES];
                              }
                              completion: nil ];
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-04-29
            • 1970-01-01
            • 1970-01-01
            • 2018-06-09
            • 1970-01-01
            • 1970-01-01
            • 2017-07-27
            • 1970-01-01
            相关资源
            最近更新 更多