【问题标题】:Transition between two viewcontroller XAMARIN.IOS两个视图控制器 XAMARIN.IOS 之间的转换
【发布时间】:2020-06-22 12:41:28
【问题描述】:

我正在尝试在 xamarin.ios 上的两个视图控制器之间创建事务(我没有使用导航控制器,而是使用视图控制器),我希望当滑动手势正在进行时,它会出现在移动的视图控制器下另一个侧视图控制器(目标控制器) 我正在尝试模拟系统本身和whatsapp 上存在的ios 的经典“返回”手势。我已经发布并且我已经部分解决了,管理滚动动画,但是对于第二个视图控制器无事可做:(

我的代码...

private void InteractiveTransitionRecognizerActionWithoutIndex(UIScreenEdgePanGestureRecognizer sender, UIView View, string x)
                {
                    
                    //Contiene un valore numerico che varia in base allo stato della gesture
                    var percento = sender.TranslationInView(View).X * 100 / sender.View.Bounds.Size.Width;
                    var storyboard = UIStoryboard.FromName("Main", null);
                   // var viewController = storyboard.InstantiateViewController(x);
            
                    

                    //Quando la gesture rileva una variazione
                    if (sender.State == UIGestureRecognizerState.Changed)
                    {
                        var minTransform = CGAffineTransform.MakeTranslation(sender.TranslationInView(View).X, 0); //*2 = piu rapido
                        var maxTransform = CGAffineTransform.MakeTranslation(sender.TranslationInView(View).X, 0);

                        View.Transform = true ? minTransform : maxTransform;


                        UIView.Animate(0.1, 0, UIViewAnimationOptions.CurveEaseInOut,
                            () =>
                            {
                                View.Transform = true ? maxTransform : minTransform;

                                //???
                                
                                
                            },
                            null
                        );

【问题讨论】:

    标签: c# xamarin xamarin.ios


    【解决方案1】:

    如果您正在使用 故事板 并且熟悉 segue。要定义自定义过渡动画,您必须按如下方式配置您的 segue:

    然后在第一个视图控制器中你可以覆盖PrepareForSegue 方法:

    public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
    {
        base.PrepareForSegue(segue, sender);
    
        var destinationVC = segue.DestinationViewController as SecondViewController;
        destinationVC.Callee = this;
        destinationVC.TransitioningDelegate = new CustomTransitioningDelegate(sender as UIView);
        destinationVC.ModalPresentationStyle = UIModalPresentationStyle.Custom;
    }
    
    public class CustomTransitioningDelegate: UIViewControllerTransitioningDelegate
    {
        readonly UIView _animationOrigin;
    
        public CustomTransitioningDelegate(UIView animationOrigin)
        {
            _animationOrigin = animationOrigin;
        }
    
        public override IUIViewControllerAnimatedTransitioning GetAnimationControllerForPresentedController(UIViewController presented, UIViewController presenting, UIViewController source)
        {
            var customTransition = new GrowTransitionAnimator(_animationOrigin);
            return customTransition;
        }
    }
    

    动画在继承自UIViewControllerAnimatedTransitioning的类中定义。

    public class GrowTransitionAnimator : UIViewControllerAnimatedTransitioning
    {
        readonly UIView _animationOrigin;
    
        public GrowTransitionAnimator(UIView animationOrigin)
        {
            _animationOrigin = animationOrigin;
        }
    
        public override async void AnimateTransition(IUIViewControllerContextTransitioning transitionContext)
        {
            // The animation here
        }
    
        public override double TransitionDuration(IUIViewControllerContextTransitioning transitionContext)
        {
            return 0.3;
        }
    }
    

    【讨论】:

    • 我的故事板中没有“segue”面板。您使用的是什么类型的控制器?
    • 你可以分享你的样品,这样我就可以直接在我这边测试。
    【解决方案2】:

    我的情况如下,从标签栏控制器开始在界面中导航,并在下一个视图控制器中导航,我实例化了每个视图控制器。要回去,我也会这样做..例如

     public void ApriStoryBoard(string x)
        {
            var storyboard = UIStoryboard.FromName("Main", null);
            var viewController = storyboard.InstantiateViewController(x); // Your view controller here
            UIApplication.SharedApplication.KeyWindow.RootViewController = viewController;
        }
    

    您为我设置的参数没有在 main.storyboard 文件中显示您使用的是什么类型的视图控制器?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多