Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将UIViewControllerTransitioningDelegate与MvxIosViewPresenter一起使用?_C#_Xamarin_Xamarin.ios_Mvvmcross - Fatal编程技术网

C# 如何将UIViewControllerTransitioningDelegate与MvxIosViewPresenter一起使用?

C# 如何将UIViewControllerTransitioningDelegate与MvxIosViewPresenter一起使用?,c#,xamarin,xamarin.ios,mvvmcross,C#,Xamarin,Xamarin.ios,Mvvmcross,我有一个视图控制器a和一个视图控制器B,我想通过自定义转换(UIViewControllerTransitioningDelegate)从a导航到B(以模式显示),如何使用MvxIosViewPresenter 我需要自己编写一个完全定制的演示者吗?还是有一种方法可以优雅地编写呢?完全可以在MvxIosViewPresenter中使用自定义转换。您只需创建一个自定义的UIViewControllerTransitioningDelegate并将其分配给您的ViewController(ViewD

我有一个视图控制器
a
和一个视图控制器
B
,我想通过自定义转换(
UIViewControllerTransitioningDelegate
)从
a
导航到
B
(以模式显示),如何使用
MvxIosViewPresenter


我需要自己编写一个完全定制的演示者吗?还是有一种方法可以优雅地编写呢?

完全可以在
MvxIosViewPresenter
中使用自定义转换。您只需创建一个自定义的
UIViewControllerTransitioningDelegate
并将其分配给您的ViewController(
ViewDidLoad
是一个很好的地方)

像这样的东西应该能起作用:

[MvxModalPresentation(ModalPresentationStyle = UIModalPresentationStyle.OverFullScreen, ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve)]
public partial class ModalView : MvxViewController<ModalViewModel>
{
    public ModalView(IntPtr handle) : base(handle)
    {
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        TransitioningDelegate = new TransitioningDelegate();
    }
}

public class TransitioningDelegate : UIViewControllerTransitioningDelegate
{
    public override IUIViewControllerAnimatedTransitioning GetAnimationControllerForPresentedController(UIViewController presented, UIViewController presenting, UIViewController source)
    {
        return new CustomTransitionAnimator();
    }
}

public class CustomTransitionAnimator : UIViewControllerAnimatedTransitioning
{
    public override double TransitionDuration(IUIViewControllerContextTransitioning transitionContext)
    {
        return 1.0f;
    }

    public override void AnimateTransition(IUIViewControllerContextTransitioning transitionContext)
    {
        var inView = transitionContext.ContainerView;
        var toVC = transitionContext.GetViewControllerForKey(UITransitionContext.ToViewControllerKey);
        var toView = toVC.View;

        inView.AddSubview(toView);

        var frame = toView.Frame;
        toView.Frame = CGRect.Empty;

        UIView.Animate(TransitionDuration(transitionContext), () =>
        {
            toView.Frame = new CGRect(10, 10, frame.Width - 20, frame.Height - 20);
        }, () =>
        {
            transitionContext.CompleteTransition(true);
        });
    }
[MvxModalPresentation(ModalPresentationStyle=UIModalPresentationStyle.OverFullScreen,ModalTransitionStyle=UIModalTransitionStyle.CrossResolve)]
公共部分类ModalView:MvxViewController
{
公共ModalView(IntPtr手柄):基座(手柄)
{
}
公共覆盖无效ViewDidLoad()
{
base.ViewDidLoad();
TransitioningDelegate=新的TransitioningDelegate();
}
}
公共类转换委托:UIViewControllerTransitioningDelegate
{
public override IUIViewcontrolleranimated转换GetAnimationControllerForPresentedController(显示UIViewController、显示UIViewController、显示UIViewController源)
{
返回新的CustomTransitionAnimator();
}
}
公共类CustomTransitionAnimator:UIViewControllerAnimatedTransitioning
{
公共覆盖双重转换持续时间(IUIViewController上下文转换转换转换上下文)
{
返回1.0f;
}
公共覆盖无效动画转换(IUIViewController上下文转换转换转换上下文)
{
var inView=transitionContext.ContainerView;
var toVC=transitionContext.getViewControllerWorkey(UITransitionContext.ToViewControllerKey);
var toView=toVC.View;
inView.AddSubview(toView);
var frame=toView.frame;
toView.Frame=CGRect.Empty;
UIView.Animate(TransitionDuration(transitionContext))=>
{
toView.Frame=新的CGRect(10,10,Frame.Width-20,Frame.Height-20);
}, () =>
{
transitionContext.CompleteTransition(真);
});
}

}

啊,我想通过演示者来控制它,但我想这也行得通。:-)