我正在尝试在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
);
答案 0 :(得分:0)
如果您使用的是故事板,并且熟悉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;
}
}
答案 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/