gpt4 book ai didi

c# - Xamarin iOS - 交互式滑动

转载 作者:行者123 更新时间:2023-11-30 12:16:32 24 4
gpt4 key购买 nike

我正在尝试像所有知名人士一样在我的 Xamarin iOS 应用程序中实现滑动。我找到了simple example用 Swift 编写,但我被第二个代码区域困住了。

class MyViewController: UIViewController, UINavigationControllerDelegate  {

override func awakeFromNib() {
super.awakeFromNib()
self.navigationController?.delegate = self
}

func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return SimpleAnimationController()
}
}

问题是,在 C# 中,一个类只能继承一个类或多个接口(interface)。另外我也不知道函数 func navigationController 正在做什么。

那么我该如何翻译代码片段呢?

感谢您的帮助!

[编辑 1]

所以我现在像这样实现该类:

public class MyFadeTransition : UIPercentDrivenInteractiveTransition, IUIViewControllerAnimatedTransitioning
{
private UIViewController TransitioningController;

public MyFadeTransition(UIViewController transitioningController)
{
TransitioningController = transitioningController;
TransitioningController.View.AddGestureRecognizer(new UIPanGestureRecognizer(DidPan));
}

void IUIViewControllerAnimatedTransitioning.AnimateTransition(IUIViewControllerContextTransitioning transitionContext)
{
var fromViewController = transitionContext.GetViewControllerForKey(UITransitionContext.FromViewControllerKey);

var toViewController = transitionContext.GetViewControllerForKey(UITransitionContext.ToViewControllerKey);
transitionContext.ContainerView.AddSubview(toViewController.View);

toViewController.View.Alpha = 0.0f;

UIView.Animate(0.35, () =>
{
toViewController.View.Alpha = 1.0f;
Debug.WriteLine("Custom Transitioning");

}, () =>
{
transitionContext.CompleteTransition(!transitionContext.TransitionWasCancelled);
Debug.WriteLine("Custom Transitioning Done");

});
}

double IUIViewControllerAnimatedTransitioning.TransitionDuration(IUIViewControllerContextTransitioning transitionContext)
{
return 0.35;
}

public void DidPan(UIPanGestureRecognizer gesture)
{
var point = gesture.LocationInView(TransitioningController.View);
double percent = Math.Max(Math.Min((point.X / 300), 0.99), 0.0f);

Debug.WriteLine(string.Format("Point: {0} | Percent: {1}", point, percent));

switch (gesture.State)
{
case UIGestureRecognizerState.Began:
// this.UsingGesture = true
this.TransitioningController.NavigationController?.PopViewController(true);
break;
case UIGestureRecognizerState.Changed:
UpdateInteractiveTransition((System.nfloat)percent);
break;
case UIGestureRecognizerState.Ended:
case UIGestureRecognizerState.Cancelled:
if (percent > 0.5)
{
Debug.WriteLine("Finishing Transition");
this.FinishInteractiveTransition();
}
else
{
Debug.WriteLine("Cancelling Transition");
this.CancelInteractiveTransition();
}
break;
default:
Debug.WriteLine("Unhandled Transition state");
break;
}
}
}

现在 ViewController 正在发生转换,但如果用户仅滑动一些像素,它们也会发生转换。知道这里发生了什么吗?

最佳答案

在 Xamarin.iOS 中,您有一个等效的界面:

IUINavigationControllerDelegate

您可以实现任意数量的接口(interface)。

你可以找到吧here

Xamarin 翻译为

public class MyViewController : UIViewController, IUINavigationControllerDelegate
{

public override void AwakeFromNib()
{
base.AwakeFromNib();
NavigationController.Delegate = this;
}

[Export("navigationController:animationControllerForOperation:fromViewController:toViewController:")]
public IUIViewControllerAnimatedTransitioning GetAnimationControllerForOperation(UINavigationController navigationController, UINavigationControllerOperation operation, UIViewController fromViewController, UIViewController toViewController)
{
return new SimpleAnimationController();
}
}

关于c# - Xamarin iOS - 交互式滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45368005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com