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