NavigationStack is a stack-modeled UI navigation controller

Overview

NAVIGATION STACK

Navigation Stack is a library with stack-modeled UI navigation controller.


We specialize in the designing and coding of custom UI for Mobile Apps and Websites.

Stay tuned for the latest updates:


Twitter CocoaPods CocoaPods CocoaPods Travis codebeat badge Carthage compatible Donate

Requirements

  • iOS 9.0+
  • Xcode 9

Installation

Just add the Source folder to your project.

or use CocoaPods with Podfile:

pod 'Navigation-stack'

or Carthage users can simply add to their Cartfile:

github "Ramotion/navigation-stack"

Usage

  1. YourNavigationController inherit from NavigationStack

  2. add code to root viewViewController

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController!.interactivePopGestureRecognizer?.delegate = self
  }
extension YourViewController: UIGestureRecognizerDelegate {
  func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {

    if navigationController?.viewControllers.count == 2 {
      return true
    }

    if let navigationController = self.navigationController as? NavigationStack {
      navigationController.showControllers()
    }

    return false
  }
}

📄 License

Navigation Stack is released under the MIT license. See LICENSE for details.

This library is a part of a selection of our best UI open-source projects.

If you use the open-source library in your project, please make sure to credit and backlink to www.ramotion.com

📱 Get the Showroom App for iOS to give it a try

Try this UI component and more like this in our iOS app. Contact us if interested.



Comments
  • Programmatic Execution?

    Programmatic Execution?

    Hey there, I don't see this in the doc anywhere, but is there a way to fire this off programmatically?

    For example:

    1. I have an action for a button, so I display the stack programmatically
    2. I can automatically select the index of the destination stack, or simply just the root controller by firing an execution once the reveal animation completes.

    Thanks and this looks like a great library, really great idea and well done.

    Dan

    question 
    opened by DanBurkhardt 2
  • Fixed UIView takeScreenshot()

    Fixed UIView takeScreenshot()

    The takeScreenshot() method would not generate a valid screenshot for a UIView. Replacing the call to drawHierarchy() with a layer.render() call fixed the issue for me on iOS 11.

    opened by brandonasuncion 1
  • Memory issues

    Memory issues

    @einsteinx2 @durul @Juriv @hyb175 @yurypaleev Hi I'm using this project for my app and I'm using it for about 15 view controller so that when you swipe back you can go back and see the other view controllers with one swipe using your great project. But I was experiencing bad memory issues, I backtracked it and found out that your project was the reason. And I backtracked it to the exact line and saw that it was because of the snapshots you were taking of each view controller that was causing this issue. Could you resolve this problem with your project. Here is the log I have explaining the memory distribution as to why this is happening with your project. Theres an image below screen shot 2017-06-03 at 10 20 04 pm

    opened by Ahmedshubber 1
  • migrate to swift 3.0

    migrate to swift 3.0

    I love this library and would love to help with it! This is an attempt to migrate to swift 3.0 for the framework and the demo app.

    CI probably does not support Swift 3.0 yet.

    opened by hyb175 1
  • [Issue] Problem when drag and release instantly, not swipe back view

    [Issue] Problem when drag and release instantly, not swipe back view

    I found this issue when swiping back and release instantly so it keeps in current view, and then push to a new view, navigation stack facing this issue. Detail please see the gif.

    navigationstack error

    opened by qhu91it 2
  • Crash

    Crash

    It Crashes sometimes. Please see the crash log

    Crashed: com.apple.main-thread
    0  NMSLite                        0x2b0cc0 UIView.takeScreenshot() -> UIImage (NavigationStack.swift:137)
    1  UIKit                          0x26ecf60b GetContextStack + 46
    2  NMSLite                        0x2b0cdc @objc UIView.takeScreenshot() -> UIImage (NavigationStack.swift)
    3  NMSLite                        0x2b1150 specialized NavigationStack.navigationController(UINavigationController, willShowViewController : UIViewController, animated : Bool) -> () (NavigationStack.swift:86)
    4  NMSLite                        0x2b00ec @objc NavigationStack.navigationController(UINavigationController, willShowViewController : UIViewController, animated : Bool) -> () (NavigationStack.swift)
    5  UIKit                          0x270725f9 -[UINavigationController _startCustomTransition:] + 1204
    6  UIKit                          0x26f7f9ef -[UINavigationController _startDeferredTransitionIfNeeded:] + 650
    7  UIKit                          0x26f7f701 -[UINavigationController __viewWillLayoutSubviews] + 52
    8  UIKit                          0x26f7f677 -[UILayoutContainerView layoutSubviews] + 214
    9  UIKit                          0x26ebe6fb -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 714
    10 QuartzCore                     0x24f2f569 -[CALayer layoutSublayers] + 128
    11 QuartzCore                     0x24f2ad2d CA::Layer::layout_if_needed(CA::Transaction*) + 352
    12 QuartzCore                     0x24f2abbd CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 16
    13 QuartzCore                     0x24f2a081 CA::Context::commit_transaction(CA::Transaction*) + 368
    14 QuartzCore                     0x24f29d55 CA::Transaction::commit() + 520
    15 UIKit                          0x26eb57f5 _afterCACommitHandler + 176
    16 CoreFoundation                 0x228ab2b1 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
    17 CoreFoundation                 0x228a95a7 __CFRunLoopDoObservers + 282
    18 CoreFoundation                 0x228a99e5 __CFRunLoopRun + 972
    19 CoreFoundation                 0x227f81c9 CFRunLoopRunSpecific + 516
    20 CoreFoundation                 0x227f7fbd CFRunLoopRunInMode + 108
    21 GraphicsServices               0x23e14af9 GSEventRunModal + 160
    22 UIKit                          0x26f2b435 UIApplicationMain + 144
    23 NMSLite                        0x1cdf8b main (main.m:21)
    24 libdispatch.dylib              0x224a4873 (Missing)
    
    opened by imhafeez 0
  • Unbalanced calls to begin/end appearance transitions for...

    Unbalanced calls to begin/end appearance transitions for...

    I have 3 ViewController. Now I choose the second ViewController and get the follow message: "Unbalanced calls to begin/end appearance transitions for ...". What can I do?

    opened by AF-cgi 1
Owner
Ramotion
UI Engineering, UI/UX Design and Front-End Development Agency
Ramotion
A controller that uses a UIStackView and view controller composition to display content in a list

StackViewController Overview StackViewController is a Swift framework that simplifies the process of building forms and other static content using UIS

Seed 867 Dec 27, 2022
Elimination-backoff stack is an unbounded lock-free LIFO linked list, that eliminates concurrent pairs of pushes and pops with exchanges.

Elimination-backoff stack is an unbounded lock-free LIFO linked list, that eliminates concurrent pairs of pushes and pops with exchanges. It uses compare-and-set (CAS) atomic operation to provide concurrent access with obstruction freedom. In order to support even greater concurrency, in case a push/pop fails, it tries to pair it with another pop/push to eliminate the operation through exchange of values.

Ebubechukwu Dimobi 0 Dec 26, 2021
SwiftUI view enabling navigation between pages of content, imitating the behaviour of UIPageViewController for iOS and watchOS

PageView SwiftUI view enabling page-based navigation, imitating the behaviour of UIPageViewController in iOS. Why SwiftUI doesn't have any kind of pag

Kacper Rączy 365 Dec 29, 2022
AGCircularPicker is helpful component for creating a controller aimed to manage any calculated parameter

We are pleased to offer you our new free lightweight plugin named AGCircularPicker. AGCircularPicker is helpful for creating a controller aimed to man

Agilie Team 617 Dec 19, 2022
A child view controller framework that makes setting up your parent controllers as easy as pie.

Description Family is a child view controller framework that makes setting up your parent controllers as easy as pie. With a simple yet powerful publi

Christoffer Winterkvist 246 Dec 28, 2022
Highly customizable Action Sheet Controller with Assets Preview written in Swift

PPAssetsActionController Play with me ▶️ ?? If you want to play with me, just tap here and enjoy! ?? ?? Show me ?? Try me ?? The easiest way to try me

Pavel Pantus 72 Feb 4, 2022
Reel Search is a Swift UI controller that allows you to choose options from a list

REEL SEARCH Reel Search is a Swift UI controller that allows you to choose options from a list We specialize in the designing and coding of custom UI

Ramotion 2.5k Dec 21, 2022
A set of UIKit helpers that simplify the usage of UIKit view's and controller's in SwiftUI.

A set of UIKit helpers that simplify the usage of UIKit view's and controller's in SwiftUI. Many of these helpers are useful even in a pure UIKit project.

SwiftUI+ 6 Oct 28, 2022
A SwiftUI bottom-up controller, like in the Maps app. Drag to expand or minimize.

SwiftUI Drawer A SwiftUI bottom-up controller, like in the Maps app. Drag to expand or minimize. Contents Add the Package Basic Usage Examples Credits

Michael Verges 695 Jan 3, 2023
Infinite paging controller, scrolling through contents and title bar scrolls with a delay

PageController PageController is infinite paging controller, scrolling through contents and title bar scrolls with a delay. Then it provide user inter

Hirohisa Kawasaki 408 Nov 28, 2022
Page view controller with bounce effect

BouncyPageViewController Page view controller with bounce effect inspired by motion design by Stan Yakushevish. Quickstart Create a queue of UIViewCon

Bohdan Orlov 843 Oct 17, 2022
iOS custom controller used in Jobandtalent app to present new view controllers as cards

CardStackController iOS custom controller used in the Jobandtalent app to present new view controllers as cards. This controller behaves very similar

jobandtalent 527 Dec 15, 2022
ElongationPreview is an elegant UI push-pop style view controller

ElongationPreview is an elegant UI push-pop style view controller

Ramotion 886 Dec 19, 2022
📖 A simple, highly informative page view controller

TL;DR UIPageViewController done properly. ⭐️ Features Simplified data source management & enhanced delegation. Dynamically insert & remove pages. Infi

UI At Six 1.8k Dec 24, 2022
Pull up controller with multiple sticky points like in iOS Maps

PullUpController Create your own pull up controller with multiple sticky points like in iOS Maps Features Multiple sticky points Landscape support Scr

Mario Iannotta 1.2k Dec 22, 2022
Provides an iOS view controller allowing a user to draw their signature with their finger in a realistic style.

Swift version now available! Mimicking pen-on-paper signatures with a touch screen presents a difficult set of challenges. The rate touch events are e

Uber Open Source 1.3k Jan 6, 2023
Meet Page View Controller for iOS by Cleveroad

While a standard page view allows you to navigate between pages by using simple gestures, our component goes further

Cleveroad 397 Aug 20, 2022
An alternative SwiftUI NavigationView implementing classic stack-based navigation giving also some more control on animations and programmatic navigation.

swiftui-navigation-stack An alternative SwiftUI NavigationView implementing classic stack-based navigation giving also some more control on animations

Matteo 753 Jan 2, 2023
A navigation controller that displays its view controllers as an interactive stack of cards.

CardNavigation The easiest way to turn a navigation controller into an interactive stack of cards. Highlights ✅ Fully interactive and interruptible ✅

James Randolph 41 Sep 29, 2022