/** * Adds screen edge gestures to a view to present a menu. * * - Parameter toView: The view to add gestures to. * - Parameter forMenu: The menu (left or right) you want to add a gesture for. If unspecified, gestures will be added for both sides. * * - Returns: The array of screen edge gestures added to `toView`. */ public List <UIScreenEdgePanGestureRecognizer> AddScreenEdgePanGesturesToPresent(UIView toView, UIRectEdge?forMenu = null) { var gestures = new List <UIScreenEdgePanGestureRecognizer>(); if (forMenu != UIRectEdge.Right) { var leftScreenEdgeGestureRecognizer = new UIScreenEdgePanGestureRecognizer(); leftScreenEdgeGestureRecognizer.AddTarget(/*SideMenuTransition.Current, */ (_) => SideMenuTransition.HandlePresentMenuLeftScreenEdge(leftScreenEdgeGestureRecognizer)); leftScreenEdgeGestureRecognizer.Edges = UIRectEdge.Left; leftScreenEdgeGestureRecognizer.CancelsTouchesInView = true; toView.AddGestureRecognizer(leftScreenEdgeGestureRecognizer); gestures.Add(leftScreenEdgeGestureRecognizer); } if (forMenu != UIRectEdge.Left) { var rightScreenEdgeGestureRecognizer = new UIScreenEdgePanGestureRecognizer(); rightScreenEdgeGestureRecognizer.AddTarget(/*SideMenuTransition.Current, */ (_) => SideMenuTransition.HandlePresentMenuRightScreenEdge(rightScreenEdgeGestureRecognizer)); rightScreenEdgeGestureRecognizer.Edges = UIRectEdge.Right; rightScreenEdgeGestureRecognizer.CancelsTouchesInView = true; toView.AddGestureRecognizer(rightScreenEdgeGestureRecognizer); gestures.Add(rightScreenEdgeGestureRecognizer); } return(gestures); }
void InteractiveTransitionRecognizerAction(UIScreenEdgePanGestureRecognizer sender) { if (sender.State == UIGestureRecognizerState.Began) { PerformSegue("BackToFirstViewController", sender); } }
void InteractiveTransitionRecognizerAction(UIScreenEdgePanGestureRecognizer sender) { if (sender.State == UIGestureRecognizerState.Began) { PerformSegue("CustomTransition", sender); } }
//https://stackoverflow.com/a/26569703/1981314 void HandleRecognizer(UIScreenEdgePanGestureRecognizer recognizer, UINavigationController navigationController) { var translate = recognizer.TranslationInView(recognizer.View); var percent = translate.X / recognizer.View.Bounds.Width * 2; var velocity = recognizer.VelocityInView(recognizer.View); if (percent > 1) { percent = 1; } if (recognizer.State == UIGestureRecognizerState.Began) { interactor = new UIPercentDrivenInteractiveTransition(); navigationController.PopViewController(true); } else if (recognizer.State == UIGestureRecognizerState.Changed) { interactor.UpdateInteractiveTransition(percent); } else if (recognizer.State == UIGestureRecognizerState.Ended) { if (percent > 0.5 || velocity.X > 0) { interactor.FinishInteractiveTransition(); } else { interactor.CancelInteractiveTransition(); } interactor = null; } }
public SwipeTransitionInteractionController(UIScreenEdgePanGestureRecognizer gestureRecognizer, UIRectEdge edge) { GestureRecognizer = gestureRecognizer; Edge = edge; GestureRecognizer.AddTarget(() => GestureRecognizeDidUpdate(GestureRecognizer)); }
void Initialize(UITableViewStyle navigationStyle = UITableViewStyle.Plain) { navigation = new DialogViewController(navigationStyle, null); navigation.TableView.AccessibilityIdentifier = "FlyoutMenu"; var navFrame = navigation.View.Frame; navFrame.Width = menuWidth; if (Position == FlyOutNavigationPosition.Right) { navFrame.X = mainView.Frame.Width - menuWidth; } navigation.View.Frame = navFrame; View.AddSubview(navigation.View); AddChildViewController(navigation); TintColor = UIColor.Black; var version = new System.Version(UIDevice.CurrentDevice.SystemVersion); isIos8 = version.Major >= 8; isIos7 = version.Major >= 7; if (isIos7) { navigation.TableView.TableHeaderView = new UIView(new CGRect(0, 0, 320, 22)) { BackgroundColor = UIColor.Clear }; } navigation.TableView.TableFooterView = new UIView(new CGRect(0, 0, 100, 100)) { BackgroundColor = UIColor.Clear }; navigation.TableView.ScrollsToTop = false; shadowView = new UIView() { AccessibilityLabel = "flyOutShadowLayeLabel", IsAccessibilityElement = true }; shadowView.BackgroundColor = UIColor.Clear; shadowView.Layer.ShadowOffset = new CGSize(Position == FlyOutNavigationPosition.Left ? -5 : 5, -1); shadowView.Layer.ShadowColor = UIColor.Black.CGColor; shadowView.Layer.ShadowOpacity = .75f; closeButton = new UIButton(); closeButton.AccessibilityHint = closeButton.AccessibilityIdentifier = "CloseMenu"; closeButton.AccessibilityLabel = "Close Menu"; closeButton.TouchUpInside += CloseButtonTapped; AlwaysShowLandscapeMenu = true; NavigationOpenedByLandscapeRotation = false; View.AddGestureRecognizer(openGesture = new UIScreenEdgePanGestureRecognizer(() => DragContentView(openGesture)) { Edges = Position == FlyOutNavigationPosition.Left ? UIRectEdge.Left : UIRectEdge.Right }); View.AddGestureRecognizer(closeGesture = new OpenMenuGestureRecognizer(DragContentView, shouldReceiveTouch)); }
void InteractiveTransitionRecognizerAction(UIScreenEdgePanGestureRecognizer sender, bool presentedValue) { // If we get swipe from the left edge, we show the menu. if (sender.State == UIGestureRecognizerState.Began) { SetPresentedValue(presentedValue); } }
void InteractiveTransitionRecognizerAction(UIScreenEdgePanGestureRecognizer sender, IReadOnlyList <Page> pageStack) { var percent = sender.TranslationInView(sender.View).X / sender.View.Frame.Width; var finishTransitionOnEnd = percent > 0.5 || sender.VelocityInView(sender.View).X > 300; _renderer.EdgeGesturePanned(new EdgeGesturePannedArgs { State = sender.State, Percent = percent, FinishTransitionOnEnd = finishTransitionOnEnd }); switch (sender.State) { case UIGestureRecognizerState.Began: _renderer.PercentDrivenInteractiveTransition = new UIPercentDrivenInteractiveTransition(); ((UINavigationController)_renderer).PopViewController(true); break; case UIGestureRecognizerState.Changed: _renderer.PercentDrivenInteractiveTransition.UpdateInteractiveTransition(percent); break; case UIGestureRecognizerState.Cancelled: case UIGestureRecognizerState.Failed: _renderer.PercentDrivenInteractiveTransition.CancelInteractiveTransition(); _renderer.PercentDrivenInteractiveTransition = null; break; case UIGestureRecognizerState.Ended: if (finishTransitionOnEnd) { _renderer.PercentDrivenInteractiveTransition.FinishInteractiveTransition(); /* * IMPORTANT! * * at the end of this transition, we need to check if we want a normal pop gesture or the custom one for the new page * as we said before, the custom pop gesture doesnt play well with "normal" pages. * So, at the end of the transition, we check if a page exists before the one we are opening and then check the mapstack * If the previous page of the pop destination doesnt have shared transitions, we remove our custom gesture */ var pageCount = pageStack.Count; if (pageCount > 2 && _renderer.TransitionMap.GetMap(pageStack[pageCount - 3], null).Count == 0) { RemoveInteractiveTransitionRecognizer(); } } else { _renderer.PercentDrivenInteractiveTransition.CancelInteractiveTransition(); } _renderer.PercentDrivenInteractiveTransition = null; break; } }
public override void ViewDidLoad() { base.ViewDidLoad(); var interactiveTransitionRecognizer = new UIScreenEdgePanGestureRecognizer(); interactiveTransitionRecognizer.AddTarget(() => InteractiveTransitionRecognizerAction(interactiveTransitionRecognizer)); interactiveTransitionRecognizer.Edges = UIRectEdge.Left; View.AddGestureRecognizer(interactiveTransitionRecognizer); }
public override void ViewDidLoad () { base.ViewDidLoad (); View.Apply (Style.Screen); NavigationBar.Apply (Style.NavigationBar); Delegate = navDelegate = new NavDelegate (); InteractivePopGestureRecognizer.ShouldBegin = GestureRecognizerShouldBegin; interactiveEdgePanGestureRecognizer = new UIScreenEdgePanGestureRecognizer (OnEdgePanGesture) { Edges = UIRectEdge.Left, ShouldBegin = GestureRecognizerShouldBegin, }; View.AddGestureRecognizer (interactiveEdgePanGestureRecognizer); }
public override void ViewDidLoad() { base.ViewDidLoad(); View.Apply(Style.Screen); NavigationBar.Apply(Style.NavigationBar); Delegate = navDelegate = new NavDelegate(); InteractivePopGestureRecognizer.ShouldBegin = GestureRecognizerShouldBegin; interactiveEdgePanGestureRecognizer = new UIScreenEdgePanGestureRecognizer(OnEdgePanGesture) { Edges = UIRectEdge.Left, ShouldBegin = GestureRecognizerShouldBegin, }; View.AddGestureRecognizer(interactiveEdgePanGestureRecognizer); }
public override void ViewDidLoad() { base.ViewDidLoad(); // Attach the Edge Gesture. var edgeSwipeOpenRecognizer = new UIScreenEdgePanGestureRecognizer(); edgeSwipeOpenRecognizer.AddTarget(() => InteractiveTransitionRecognizerAction(edgeSwipeOpenRecognizer, true)); edgeSwipeOpenRecognizer.Edges = UIRectEdge.Left; View.AddGestureRecognizer(edgeSwipeOpenRecognizer); var edgeSwipeCloseRecognizer = new UIScreenEdgePanGestureRecognizer(); edgeSwipeCloseRecognizer.AddTarget(() => InteractiveTransitionRecognizerAction(edgeSwipeCloseRecognizer, false)); edgeSwipeCloseRecognizer.Edges = UIRectEdge.Right; View.AddGestureRecognizer(edgeSwipeCloseRecognizer); }
public override void ViewDidLoad() { base.ViewDidLoad(); var screenEdgePanGestureRecognizer = new UIScreenEdgePanGestureRecognizer() { Edges = UIRectEdge.Left }; screenEdgePanGestureRecognizer.AddTarget(() => SlideToOpenMasterViewController(screenEdgePanGestureRecognizer)); View.AddGestureRecognizer(screenEdgePanGestureRecognizer); if (DetailViewController == null) { return; } AttachDetaiViewController(); }
nfloat PercentForGesture(UIScreenEdgePanGestureRecognizer gesture) { if (TransitionContext == null) { return(0f); } UIView transitionContainerView = TransitionContext.ContainerView; var locationInSourceView = gesture.LocationInView(transitionContainerView); nfloat width = 0f; nfloat height = 0f; if (transitionContainerView != null) { width = transitionContainerView.Bounds.Width; height = transitionContainerView.Bounds.Height; } if (Edge == UIRectEdge.Right) { return((width - locationInSourceView.X) / width); } if (Edge == UIRectEdge.Left) { return(locationInSourceView.X / width); } if (Edge == UIRectEdge.Bottom) { return((height - locationInSourceView.Y) / height); } if (Edge == UIRectEdge.Top) { return(locationInSourceView.Y / height); } return(0); }
void Initialize(UIViewController navigationController = null) { NavigationViewController = navigationController ?? new UIViewController(); NavigationViewController.View.AccessibilityIdentifier = "FlyoutMenu"; var navFrame = NavigationViewController.View.Frame; navFrame.Width = menuWidth; if (Position == FlyOutNavigationPosition.Right) { navFrame.X = mainView.Frame.Width - menuWidth; } NavigationViewController.View.Frame = navFrame; View.AddSubview(NavigationViewController.View); AddChildViewController(NavigationViewController); shadowView = new UIView() { AccessibilityLabel = "flyOutShadowLayeLabel", IsAccessibilityElement = true }; shadowView.BackgroundColor = UIColor.Clear; shadowView.Layer.ShadowOffset = new CGSize(Position == FlyOutNavigationPosition.Left ? -5 : 5, -1); shadowView.Layer.ShadowColor = UIColor.Black.CGColor; shadowView.Layer.ShadowOpacity = .75f; closeButton = new UIButton(); closeButton.AccessibilityHint = closeButton.AccessibilityIdentifier = "CloseMenu"; closeButton.AccessibilityLabel = "Close Menu"; closeButton.TouchUpInside += CloseButtonTapped; AlwaysShowLandscapeMenu = true; NavigationOpenedByLandscapeRotation = false; View.AddGestureRecognizer(openGesture = new UIScreenEdgePanGestureRecognizer(() => DragContentView(openGesture)) { Edges = Position == FlyOutNavigationPosition.Left ? UIRectEdge.Left : UIRectEdge.Right }); View.AddGestureRecognizer(closeGesture = new OpenMenuGestureRecognizer(DragContentView, shouldReceiveTouch)); }
public override IUIViewControllerAnimatedTransitioning GetAnimationControllerForOperation( UINavigationController navigationController, UINavigationControllerOperation operation, UIViewController fromViewController, UIViewController toViewController) { //TODO: remove dependency on CitySelectViewController with interface or something else if (operation == UINavigationControllerOperation.Push && fromViewController is HomePageController vc1) { //Recognizer is added only on push so that user can interactively pop the presented screen. var recognizer = new UIScreenEdgePanGestureRecognizer(); recognizer.Edges = UIRectEdge.Left; recognizer.AddTarget(() => { HandleRecognizer(recognizer, navigationController); }); toViewController.View.AddGestureRecognizer(recognizer); return(new CustomTransition(operation, vc1.AnimationSourceView)); } else if (operation == UINavigationControllerOperation.Pop && toViewController is HomePageController vc2) { return(new CustomTransition(operation, vc2.AnimationSourceView)); } return(null); }
void GestureRecognizeDidUpdate(UIScreenEdgePanGestureRecognizer sender) { switch (sender.State) { case UIGestureRecognizerState.Changed: UpdateInteractiveTransition(PercentForGesture(sender)); break; case UIGestureRecognizerState.Ended: if (PercentForGesture(sender) >= 0.5) { FinishInteractiveTransition(); } else { CancelInteractiveTransition(); } break; default: CancelInteractiveTransition(); break; } }
public void HandlePresentMenuRightScreenEdge(UIScreenEdgePanGestureRecognizer edge) { this.PresentDirection = UIRectEdge.Right; HandlePresentMenuPan(edge); }
void Initialize(UITableViewStyle navigationStyle = UITableViewStyle.Plain) { navigation = new DialogViewController (navigationStyle, null); navigation.TableView.AccessibilityIdentifier = "FlyoutMenu"; var navFrame = navigation.View.Frame; navFrame.Width = menuWidth; if (Position == FlyOutNavigationPosition.Right) navFrame.X = mainView.Frame.Width - menuWidth; navigation.View.Frame = navFrame; View.AddSubview(navigation.View); TintColor = UIColor.Black; var version = new System.Version(UIDevice.CurrentDevice.SystemVersion); isIos8 = version.Major >= 8; isIos7 = version.Major >= 7; if(isIos7){ navigation.TableView.TableHeaderView = new UIView (new CGRect (0, 0, 320, 22)) { BackgroundColor = UIColor.Clear }; } navigation.TableView.TableFooterView = new UIView(new CGRect(0, 0, 100, 100)) {BackgroundColor = UIColor.Clear}; navigation.TableView.ScrollsToTop = false; shadowView = new UIView(){AccessibilityLabel = "flyOutShadowLayeLabel" , IsAccessibilityElement = true}; shadowView.BackgroundColor = UIColor.Clear; shadowView.Layer.ShadowOffset = new CGSize(Position == FlyOutNavigationPosition.Left ? -5 : 5, -1); shadowView.Layer.ShadowColor = UIColor.Black.CGColor; shadowView.Layer.ShadowOpacity = .75f; closeButton = new UIButton (); closeButton.AccessibilityHint = closeButton.AccessibilityIdentifier ="CloseMenu"; closeButton.AccessibilityLabel = "Close Menu"; closeButton.TouchUpInside += CloseButtonTapped; AlwaysShowLandscapeMenu = true; NavigationOpenedByLandscapeRotation = false; View.AddGestureRecognizer (openGesture = new UIScreenEdgePanGestureRecognizer(() => DragContentView (openGesture)){Edges = Position == FlyOutNavigationPosition.Left ? UIRectEdge.Left : UIRectEdge.Right}); View.AddGestureRecognizer (closeGesture = new OpenMenuGestureRecognizer (DragContentView, shouldReceiveTouch)); }