如何将 UIViewControllerTransitioningDelegate 与 MvxIosViewPresenter 一起使用?
How to use UIViewControllerTransitioningDelegate with MvxIosViewPresenter?
我有一个视图控制器 A
和一个视图控制器 B
,我想使用自定义转换从 A
导航到 B
(模态呈现)( UIViewControllerTransitioningDelegate
), 我如何使用 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);
});
}
}
我有一个视图控制器 A
和一个视图控制器 B
,我想使用自定义转换从 A
导航到 B
(模态呈现)( UIViewControllerTransitioningDelegate
), 我如何使用 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);
});
}
}