0
我想实现像所有大名字一样滑入我的Xamarin iOS应用程序。我发现在Swift中编写了一个simple example,但我陷入了第二个代码区域。Xamarin iOS - 互动滑动
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#中一个类只能从一个类或多个接口继承。另外我也不清楚功能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;
}
}
}
现在ViewControllers正在转换,但他们也如果用户只刷卡一些像素。有什么想法发生在这里?
我明白了,但行** NavigationController.Delegate =这一点; **抛出一个异常,是否叫AwakeFromNib或viewDidLoad中。 ** System.Reflection.TargetInvocationException:调用的目标引发了异常。 ---> System.NullReferenceException:对象不设置为一个对象** **编辑的一个实例:**有趣的事情:**如果(!this.NavigationController = NULL){ \t \t \t \t NavigationController。代表=这个; \t \t \t} **似乎做的工作 –
这是因为你的ViewController没有NavigationController。 你如何启动MyViewController?你使用PushViewController方法吗?它必须位于NavigationController的导航堆栈中,仅当您在显示ViewController时使用PushViewController或者使用新的ViewController作为根ViewController创建新的NavigationController时才会发生此情况。 – stonecompass
看到https://stackoverflow.com/a/7767160/2710750 – stonecompass