我有一个视图控制器A
和一个视图控制器B
,我希望从A
导航到B
(以模态方式呈现)并使用自定义转换({{ 1}}),我如何使用UIViewControllerTransitioningDelegate
?
我是否需要自己编写一个完全自定义的演示者,或者是否有办法以优雅的方式进行操作?
答案 0 :(得分:1)
完全可以使用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);
});
}
}