两个视图控制器XAMARIN.IOS之间的过渡

时间:2020-06-22 12:41:28

标签: c# xamarin xamarin.ios

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

enter image description here

我的代码...

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

2 个答案:

答案 0 :(得分:0)

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

enter image description here

然后在第一个视图控制器中,您可以覆盖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;
    }
}

答案 1 :(得分:0)

以下是我的情况,从标签栏控制器开始在界面中导航,然后在下一个viewcontroller中导航,我实例化了每个新的ViewController。回到上一步,例如...

 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文件中显示,您正在使用哪种类型的Viewcontroller? https://michaelscodingspot.com/c-job-queues/

相关问题