├── .gitignore ├── .swift-version ├── .travis.yml ├── Android_Java@2x.png ├── Android_Kotlin@2x.png ├── AppStore@2x.png ├── CONTRIBUTING.md ├── Download_on_the_App_Store_Badge_US-UK_135x40.png ├── LICENSE ├── Navigation-stack.podspec ├── NavigationStack ├── Info.plist └── NavigationStack.h ├── NavigationStackDemo.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ └── NavigationStack.xcscheme ├── NavigationStackDemo ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Ramotion.png │ │ ├── icon-120.png │ │ ├── icon-152.png │ │ ├── icon-167.png │ │ ├── icon-180.png │ │ ├── icon-20.png │ │ ├── icon-29.png │ │ ├── icon-40.png │ │ ├── icon-58.png │ │ ├── icon-60.png │ │ ├── icon-76.png │ │ ├── icon-80.png │ │ └── icon-87.png │ ├── Contents.json │ ├── Fifth │ │ ├── ButtonBorder.imageset │ │ │ ├── ButtonBorder.pdf │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Fifth-Icon-0.imageset │ │ │ ├── Contents.json │ │ │ └── Fifth-Icon-0.png │ │ ├── Fifth-Icon-1.imageset │ │ │ ├── Contents.json │ │ │ └── Fifth-Icon-1.png │ │ ├── Fifth-Icon-2.imageset │ │ │ ├── Contents.json │ │ │ └── Fifth-Icon-2.png │ │ └── Fifth-Icon-3.imageset │ │ │ ├── Contents.json │ │ │ └── Fifth-Icon-3.png │ ├── First │ │ ├── Contents.json │ │ └── icons │ │ │ ├── Arrow.imageset │ │ │ ├── Arrow.pdf │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── icon-0.imageset │ │ │ ├── Contents.json │ │ │ └── icon-0.png │ │ │ ├── icon-1.imageset │ │ │ ├── Contents.json │ │ │ └── icon-1.png │ │ │ ├── icon-2.imageset │ │ │ ├── Contents.json │ │ │ └── icon-2.png │ │ │ ├── icon-3.imageset │ │ │ ├── Contents.json │ │ │ └── icon-3.png │ │ │ └── icon-4.imageset │ │ │ ├── Contents.json │ │ │ └── icon-4.png │ ├── Four │ │ ├── Contents.json │ │ ├── GirlsBig.imageset │ │ │ ├── Contents.json │ │ │ └── GirlsBig.png │ │ ├── NYbg.imageset │ │ │ ├── Contents.json │ │ │ └── NYbg.png │ │ ├── faceIcon.imageset │ │ │ ├── Contents.json │ │ │ └── faceIcon.png │ │ └── foodIcon.imageset │ │ │ ├── Contents.json │ │ │ └── foodIcon.png │ ├── Second │ │ ├── BridgeImage.imageset │ │ │ ├── BridgeImage.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── DotsIcon.imageset │ │ │ ├── Contents.json │ │ │ └── DotsIcon.pdf │ │ ├── HeadnImage.imageset │ │ │ ├── Contents.json │ │ │ └── HeadnImage.png │ │ ├── PCImage.imageset │ │ │ ├── Contents.json │ │ │ └── PCImage.png │ │ ├── PersonIcon.imageset │ │ │ ├── Contents.json │ │ │ └── PersonIcon.pdf │ │ ├── PinIcon.imageset │ │ │ ├── Contents.json │ │ │ └── PinIcon.pdf │ │ ├── RamotionBig.imageset │ │ │ ├── Contents.json │ │ │ └── RamotionBig.pdf │ │ └── backButton.imageset │ │ │ ├── Contents.json │ │ │ └── backButton.pdf │ ├── Third │ │ ├── BGmessage.imageset │ │ │ ├── BGmessage.pdf │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── girsl.imageset │ │ │ ├── Contents.json │ │ │ └── girsl.png │ ├── arrow.imageset │ │ ├── Contents.json │ │ └── arrow.pdf │ └── back.imageset │ │ ├── Contents.json │ │ └── back.pdf ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist └── ViewControllers │ ├── FifthViewController │ └── FifthViewController.swift │ ├── FirstViewController │ └── FirstTableViewController.swift │ ├── SecondViewController │ └── SecondViewController.swift │ └── ThirdViewController │ └── ThirdViewController.swift ├── Package.swift ├── README.md ├── React Native@2x.png ├── Source ├── CollectionView │ ├── Cell │ │ └── CollectionViewStackCell.swift │ ├── CollectionStackViewController.swift │ └── FlowLayout │ │ └── CollectionViewStackFlowLayout.swift ├── Fonts │ ├── OpenSans-Light.ttf │ ├── OpenSans-Regular.ttf │ └── OpenSans-Semibold.ttf └── NavigationStack.swift ├── Swift@2x.png ├── contact_our_team@2x.png ├── docs ├── Classes.html ├── Classes │ └── NavigationStack.html ├── css │ ├── highlight.css │ └── jazzy.css ├── docsets │ ├── NavigationStackDemo.docset │ │ └── Contents │ │ │ ├── Info.plist │ │ │ └── Resources │ │ │ ├── Documents │ │ │ ├── Classes.html │ │ │ ├── Classes │ │ │ │ └── NavigationStack.html │ │ │ ├── css │ │ │ │ ├── highlight.css │ │ │ │ └── jazzy.css │ │ │ ├── img │ │ │ │ ├── carat.png │ │ │ │ ├── dash.png │ │ │ │ └── gh.png │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── jazzy.js │ │ │ │ └── jquery.min.js │ │ │ └── undocumented.txt │ │ │ └── docSet.dsidx │ └── NavigationStackDemo.tgz ├── img │ ├── carat.png │ ├── dash.png │ └── gh.png ├── index.html ├── js │ ├── jazzy.js │ └── jquery.min.js └── undocumented.txt ├── header.png └── navigation-stack.gif /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/screenshots 64 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4.2 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | osx_image: xcode9.2 2 | language: objective-c 3 | 4 | xcode_project: NavigationStackDemo.xcodeproj 5 | xcode_scheme: NavigationStack 6 | xcode_sdk: iphonesimulator11.2 7 | 8 | # whitelist 9 | branches: 10 | only: 11 | - master 12 | -------------------------------------------------------------------------------- /Android_Java@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/Android_Java@2x.png -------------------------------------------------------------------------------- /Android_Kotlin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/Android_Kotlin@2x.png -------------------------------------------------------------------------------- /AppStore@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/AppStore@2x.png -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to a Project 2 | Now that you’ve found the material for understanding the project, here is how you can take action. 3 | 4 | ### Create an Issue 5 | 6 | If you find a bug in a project you’re using (and you don’t know how to fix it), have trouble following the documentation or have a question about the project – create an issue! There’s nothing to it and whatever issue you’re having, you’re likely not the only one, so others will find your issue helpful, too. For more information on how issues work, check out our Issues guide. 7 | 8 | #### Issues Pro Tips 9 | 10 | Check existing issues for your issue. Duplicating an issue is slower for both parties so search through open and closed issues to see if what you’re running into has been addressed already. 11 | Be clear about what your problem is: what was the expected outcome, what happened instead? Detail how someone else can recreate the problem. 12 | Link to demos recreating the problem on things like JSFiddle or CodePen. 13 | Include system details like what the browser, library or operating system you’re using and its version. 14 | Paste error output or logs in your issue or in a Gist. If pasting them in the issue, wrap it in three backticks: ``` so that it renders nicely. 15 | 16 | ### Pull Request 17 | 18 | If you’re able to patch the bug or add the feature yourself – fantastic, make a pull request with the code! Be sure you’ve read any documents on contributing, understand the license and have signed a CLA if required. Once you’ve submitted a pull request the maintainer(s) can compare your branch to the existing one and decide whether or not to incorporate (pull in) your changes. 19 | 20 | #### Pull Request Pro Tips 21 | 22 | Fork the repository and clone it locally. Connect your local to the original ‘upstream’ repository by adding it as a remote. Pull in changes from ‘upstream’ often so that you stay up to date so that when you submit your pull request, merge conflicts will be less likely. See more detailed instructions here. 23 | Create a branch for your edits. 24 | Be clear about what problem is occurring and how someone can recreate that problem or why your feature will help. Then be equally as clear about the steps you took to make your changes. 25 | It’s best to test. Run your changes against any existing tests if they exist and create new ones when needed. Whether tests exist or not, make sure your changes don’t break the existing project. 26 | Include screenshots of the before and after if your changes include differences in HTML/CSS. Drag and drop the images into the body of your pull request. 27 | Contribute in the style of the project to the best of your abilities. This may mean using indents, semi colons or comments differently than you would in your own repository, but makes it easier for the maintainer to merge, others to understand and maintain in the future. 28 | 29 | #### Open Pull Requests 30 | 31 | Once you’ve opened a pull request a discussion will start around your proposed changes. Other contributors and users may chime in, but ultimately the decision is made by the maintainer(s). You may be asked to make some changes to your pull request, if so, add more commits to your branch and push them – they’ll automatically go into the existing pull request. 32 | 33 | If your pull request is merged – great! If it is not, no sweat, it may not be what the project maintainer had in mind, or they were already working on it. This happens, so our recommendation is to take any feedback you’ve received and go forth and pull request again – or create your own open source project. -------------------------------------------------------------------------------- /Download_on_the_App_Store_Badge_US-UK_135x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/Download_on_the_App_Store_Badge_US-UK_135x40.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Ramotion 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Navigation-stack.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Navigation-stack' 3 | s.version = '3.1.0' 4 | s.summary = 'Show list of navigationControllers' 5 | s.license = 'MIT' 6 | s.homepage = 'https://github.com/Ramotion/navigation-stack' 7 | s.author = { 'Juri Vasylenko' => 'juri.v@ramotion.com' } 8 | s.ios.deployment_target = '10.0' 9 | s.source = { :git => 'https://github.com/Ramotion/navigation-stack.git', :tag => s.version.to_s } 10 | s.source_files = 'Source/**/*.swift' 11 | end 12 | -------------------------------------------------------------------------------- /NavigationStack/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /NavigationStack/NavigationStack.h: -------------------------------------------------------------------------------- 1 | // 2 | // NavigationStack.h 3 | // NavigationStack 4 | // 5 | // Created by Alex K. on 01/06/16. 6 | // Copyright © 2016 Alex K. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for NavigationStack. 12 | FOUNDATION_EXPORT double NavigationStackVersionNumber; 13 | 14 | //! Project version string for NavigationStack. 15 | FOUNDATION_EXPORT const unsigned char NavigationStackVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /NavigationStackDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 47; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 840D54101C8705FA00555605 /* FirstTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D540F1C8705FA00555605 /* FirstTableViewController.swift */; }; 11 | 84368B3F1CFEDDB1007C4278 /* NavigationStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 84368B3E1CFEDDB1007C4278 /* NavigationStack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 84368B431CFEDDB1007C4278 /* NavigationStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84368B3C1CFEDDB1007C4278 /* NavigationStack.framework */; }; 13 | 84368B441CFEDDB1007C4278 /* NavigationStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84368B3C1CFEDDB1007C4278 /* NavigationStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | 84368B491CFEDDBE007C4278 /* NavigationStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1261C80250A00B53B4E /* NavigationStack.swift */; }; 15 | 84368B4A1CFEDDC5007C4278 /* CollectionStackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1231C80250A00B53B4E /* CollectionStackViewController.swift */; }; 16 | 84368B4B1CFEDDC9007C4278 /* CollectionViewStackFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1221C80250A00B53B4E /* CollectionViewStackFlowLayout.swift */; }; 17 | 84368B4C1CFEDDCE007C4278 /* CollectionViewStackCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1201C80250A00B53B4E /* CollectionViewStackCell.swift */; }; 18 | 8444B0F01C80238500B53B4E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B0EF1C80238500B53B4E /* AppDelegate.swift */; }; 19 | 8444B0F51C80238500B53B4E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8444B0F31C80238500B53B4E /* Main.storyboard */; }; 20 | 8444B0F71C80238500B53B4E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8444B0F61C80238500B53B4E /* Assets.xcassets */; }; 21 | 8444B0FA1C80238500B53B4E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8444B0F81C80238500B53B4E /* LaunchScreen.storyboard */; }; 22 | 8444B1271C80250A00B53B4E /* CollectionViewStackCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1201C80250A00B53B4E /* CollectionViewStackCell.swift */; }; 23 | 8444B1281C80250A00B53B4E /* CollectionViewStackFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1221C80250A00B53B4E /* CollectionViewStackFlowLayout.swift */; }; 24 | 8444B1291C80250A00B53B4E /* CollectionStackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1231C80250A00B53B4E /* CollectionStackViewController.swift */; }; 25 | 8444B12B1C80250A00B53B4E /* NavigationStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8444B1261C80250A00B53B4E /* NavigationStack.swift */; }; 26 | 846302891C8ABC340015CD81 /* OpenSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 846302881C8ABC340015CD81 /* OpenSans-Regular.ttf */; }; 27 | 847B0FA91C846B8100E2C54D /* FifthViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847B0FA81C846B8100E2C54D /* FifthViewController.swift */; }; 28 | 847B0FAD1C846B9200E2C54D /* ThirdViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847B0FAC1C846B9200E2C54D /* ThirdViewController.swift */; }; 29 | 847B0FB11C846C6100E2C54D /* SecondViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847B0FB01C846C6100E2C54D /* SecondViewController.swift */; }; 30 | 84B820991C8AE00E00939EE7 /* OpenSans-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 84B820981C8AE00E00939EE7 /* OpenSans-Semibold.ttf */; }; 31 | 84E8E5A61C89D2C800A8B640 /* OpenSans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 84E8E5A51C89D2C800A8B640 /* OpenSans-Light.ttf */; }; 32 | /* End PBXBuildFile section */ 33 | 34 | /* Begin PBXContainerItemProxy section */ 35 | 84368B411CFEDDB1007C4278 /* PBXContainerItemProxy */ = { 36 | isa = PBXContainerItemProxy; 37 | containerPortal = 8444B0E41C80238500B53B4E /* Project object */; 38 | proxyType = 1; 39 | remoteGlobalIDString = 84368B3B1CFEDDB1007C4278; 40 | remoteInfo = NavigationStack; 41 | }; 42 | /* End PBXContainerItemProxy section */ 43 | 44 | /* Begin PBXCopyFilesBuildPhase section */ 45 | 84368B481CFEDDB1007C4278 /* Embed Frameworks */ = { 46 | isa = PBXCopyFilesBuildPhase; 47 | buildActionMask = 2147483647; 48 | dstPath = ""; 49 | dstSubfolderSpec = 10; 50 | files = ( 51 | 84368B441CFEDDB1007C4278 /* NavigationStack.framework in Embed Frameworks */, 52 | ); 53 | name = "Embed Frameworks"; 54 | runOnlyForDeploymentPostprocessing = 0; 55 | }; 56 | /* End PBXCopyFilesBuildPhase section */ 57 | 58 | /* Begin PBXFileReference section */ 59 | 840D540F1C8705FA00555605 /* FirstTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FirstTableViewController.swift; sourceTree = ""; }; 60 | 84368B3C1CFEDDB1007C4278 /* NavigationStack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NavigationStack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 61 | 84368B3E1CFEDDB1007C4278 /* NavigationStack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NavigationStack.h; sourceTree = ""; }; 62 | 84368B401CFEDDB1007C4278 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 63 | 8444B0EC1C80238500B53B4E /* Navigation Stack.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Navigation Stack.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | 8444B0EF1C80238500B53B4E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 65 | 8444B0F41C80238500B53B4E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 66 | 8444B0F61C80238500B53B4E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 67 | 8444B0F91C80238500B53B4E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 68 | 8444B0FB1C80238500B53B4E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 69 | 8444B1201C80250A00B53B4E /* CollectionViewStackCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewStackCell.swift; sourceTree = ""; }; 70 | 8444B1221C80250A00B53B4E /* CollectionViewStackFlowLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewStackFlowLayout.swift; sourceTree = ""; }; 71 | 8444B1231C80250A00B53B4E /* CollectionStackViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionStackViewController.swift; sourceTree = ""; }; 72 | 8444B1261C80250A00B53B4E /* NavigationStack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationStack.swift; sourceTree = ""; }; 73 | 846302881C8ABC340015CD81 /* OpenSans-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Regular.ttf"; sourceTree = ""; }; 74 | 847B0FA81C846B8100E2C54D /* FifthViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FifthViewController.swift; sourceTree = ""; }; 75 | 847B0FAC1C846B9200E2C54D /* ThirdViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThirdViewController.swift; sourceTree = ""; }; 76 | 847B0FB01C846C6100E2C54D /* SecondViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecondViewController.swift; sourceTree = ""; }; 77 | 84B820981C8AE00E00939EE7 /* OpenSans-Semibold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Semibold.ttf"; sourceTree = ""; }; 78 | 84E8E5A51C89D2C800A8B640 /* OpenSans-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Light.ttf"; sourceTree = ""; }; 79 | /* End PBXFileReference section */ 80 | 81 | /* Begin PBXFrameworksBuildPhase section */ 82 | 84368B381CFEDDB1007C4278 /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | ); 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | 8444B0E91C80238500B53B4E /* Frameworks */ = { 90 | isa = PBXFrameworksBuildPhase; 91 | buildActionMask = 2147483647; 92 | files = ( 93 | 84368B431CFEDDB1007C4278 /* NavigationStack.framework in Frameworks */, 94 | ); 95 | runOnlyForDeploymentPostprocessing = 0; 96 | }; 97 | /* End PBXFrameworksBuildPhase section */ 98 | 99 | /* Begin PBXGroup section */ 100 | 84368B3D1CFEDDB1007C4278 /* NavigationStack */ = { 101 | isa = PBXGroup; 102 | children = ( 103 | 84368B3E1CFEDDB1007C4278 /* NavigationStack.h */, 104 | 84368B401CFEDDB1007C4278 /* Info.plist */, 105 | ); 106 | path = NavigationStack; 107 | sourceTree = ""; 108 | }; 109 | 8444B0E31C80238500B53B4E = { 110 | isa = PBXGroup; 111 | children = ( 112 | 8444B0EE1C80238500B53B4E /* NavigationStackDemo */, 113 | 84368B3D1CFEDDB1007C4278 /* NavigationStack */, 114 | 8444B0ED1C80238500B53B4E /* Products */, 115 | ); 116 | sourceTree = ""; 117 | }; 118 | 8444B0ED1C80238500B53B4E /* Products */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 8444B0EC1C80238500B53B4E /* Navigation Stack.app */, 122 | 84368B3C1CFEDDB1007C4278 /* NavigationStack.framework */, 123 | ); 124 | name = Products; 125 | sourceTree = ""; 126 | }; 127 | 8444B0EE1C80238500B53B4E /* NavigationStackDemo */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 847B0F851C842EAD00E2C54D /* ViewControllers */, 131 | 8444B11D1C80247500B53B4E /* Source */, 132 | 8444B0EF1C80238500B53B4E /* AppDelegate.swift */, 133 | 8444B0F31C80238500B53B4E /* Main.storyboard */, 134 | 8444B0F61C80238500B53B4E /* Assets.xcassets */, 135 | 8444B0F81C80238500B53B4E /* LaunchScreen.storyboard */, 136 | 8444B0FB1C80238500B53B4E /* Info.plist */, 137 | ); 138 | path = NavigationStackDemo; 139 | sourceTree = ""; 140 | }; 141 | 8444B11D1C80247500B53B4E /* Source */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 84E8E5A41C89D28C00A8B640 /* Fonts */, 145 | 8444B11E1C80250A00B53B4E /* CollectionView */, 146 | 8444B1261C80250A00B53B4E /* NavigationStack.swift */, 147 | ); 148 | name = Source; 149 | path = ../Source; 150 | sourceTree = ""; 151 | }; 152 | 8444B11E1C80250A00B53B4E /* CollectionView */ = { 153 | isa = PBXGroup; 154 | children = ( 155 | 8444B11F1C80250A00B53B4E /* Cell */, 156 | 8444B1211C80250A00B53B4E /* FlowLayout */, 157 | 8444B1231C80250A00B53B4E /* CollectionStackViewController.swift */, 158 | ); 159 | path = CollectionView; 160 | sourceTree = ""; 161 | }; 162 | 8444B11F1C80250A00B53B4E /* Cell */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | 8444B1201C80250A00B53B4E /* CollectionViewStackCell.swift */, 166 | ); 167 | path = Cell; 168 | sourceTree = ""; 169 | }; 170 | 8444B1211C80250A00B53B4E /* FlowLayout */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | 8444B1221C80250A00B53B4E /* CollectionViewStackFlowLayout.swift */, 174 | ); 175 | path = FlowLayout; 176 | sourceTree = ""; 177 | }; 178 | 847B0F851C842EAD00E2C54D /* ViewControllers */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | 847B0F8F1C844B4F00E2C54D /* FirstViewController */, 182 | 847B0F901C844BBC00E2C54D /* SecondViewController */, 183 | 847B0F951C84618300E2C54D /* ThirdViewController */, 184 | 847B0FA31C84690E00E2C54D /* FifthViewController */, 185 | ); 186 | path = ViewControllers; 187 | sourceTree = ""; 188 | }; 189 | 847B0F8F1C844B4F00E2C54D /* FirstViewController */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 840D540F1C8705FA00555605 /* FirstTableViewController.swift */, 193 | ); 194 | path = FirstViewController; 195 | sourceTree = ""; 196 | }; 197 | 847B0F901C844BBC00E2C54D /* SecondViewController */ = { 198 | isa = PBXGroup; 199 | children = ( 200 | 847B0FB01C846C6100E2C54D /* SecondViewController.swift */, 201 | ); 202 | path = SecondViewController; 203 | sourceTree = ""; 204 | }; 205 | 847B0F951C84618300E2C54D /* ThirdViewController */ = { 206 | isa = PBXGroup; 207 | children = ( 208 | 847B0FAC1C846B9200E2C54D /* ThirdViewController.swift */, 209 | ); 210 | path = ThirdViewController; 211 | sourceTree = ""; 212 | }; 213 | 847B0FA31C84690E00E2C54D /* FifthViewController */ = { 214 | isa = PBXGroup; 215 | children = ( 216 | 847B0FA81C846B8100E2C54D /* FifthViewController.swift */, 217 | ); 218 | path = FifthViewController; 219 | sourceTree = ""; 220 | }; 221 | 84E8E5A41C89D28C00A8B640 /* Fonts */ = { 222 | isa = PBXGroup; 223 | children = ( 224 | 84B820981C8AE00E00939EE7 /* OpenSans-Semibold.ttf */, 225 | 846302881C8ABC340015CD81 /* OpenSans-Regular.ttf */, 226 | 84E8E5A51C89D2C800A8B640 /* OpenSans-Light.ttf */, 227 | ); 228 | path = Fonts; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXGroup section */ 232 | 233 | /* Begin PBXHeadersBuildPhase section */ 234 | 84368B391CFEDDB1007C4278 /* Headers */ = { 235 | isa = PBXHeadersBuildPhase; 236 | buildActionMask = 2147483647; 237 | files = ( 238 | 84368B3F1CFEDDB1007C4278 /* NavigationStack.h in Headers */, 239 | ); 240 | runOnlyForDeploymentPostprocessing = 0; 241 | }; 242 | /* End PBXHeadersBuildPhase section */ 243 | 244 | /* Begin PBXNativeTarget section */ 245 | 84368B3B1CFEDDB1007C4278 /* NavigationStack */ = { 246 | isa = PBXNativeTarget; 247 | buildConfigurationList = 84368B471CFEDDB1007C4278 /* Build configuration list for PBXNativeTarget "NavigationStack" */; 248 | buildPhases = ( 249 | 84368B371CFEDDB1007C4278 /* Sources */, 250 | 84368B381CFEDDB1007C4278 /* Frameworks */, 251 | 84368B391CFEDDB1007C4278 /* Headers */, 252 | 84368B3A1CFEDDB1007C4278 /* Resources */, 253 | ); 254 | buildRules = ( 255 | ); 256 | dependencies = ( 257 | ); 258 | name = NavigationStack; 259 | productName = NavigationStack; 260 | productReference = 84368B3C1CFEDDB1007C4278 /* NavigationStack.framework */; 261 | productType = "com.apple.product-type.framework"; 262 | }; 263 | 8444B0EB1C80238500B53B4E /* NavigationStackDemo */ = { 264 | isa = PBXNativeTarget; 265 | buildConfigurationList = 8444B1141C80238500B53B4E /* Build configuration list for PBXNativeTarget "NavigationStackDemo" */; 266 | buildPhases = ( 267 | 8444B0E81C80238500B53B4E /* Sources */, 268 | 8444B0E91C80238500B53B4E /* Frameworks */, 269 | 8444B0EA1C80238500B53B4E /* Resources */, 270 | 84368B481CFEDDB1007C4278 /* Embed Frameworks */, 271 | ); 272 | buildRules = ( 273 | ); 274 | dependencies = ( 275 | 84368B421CFEDDB1007C4278 /* PBXTargetDependency */, 276 | ); 277 | name = NavigationStackDemo; 278 | productName = NavigationStackDemo; 279 | productReference = 8444B0EC1C80238500B53B4E /* Navigation Stack.app */; 280 | productType = "com.apple.product-type.application"; 281 | }; 282 | /* End PBXNativeTarget section */ 283 | 284 | /* Begin PBXProject section */ 285 | 8444B0E41C80238500B53B4E /* Project object */ = { 286 | isa = PBXProject; 287 | attributes = { 288 | LastSwiftUpdateCheck = 0720; 289 | LastUpgradeCheck = 1110; 290 | ORGANIZATIONNAME = "Alex K."; 291 | TargetAttributes = { 292 | 84368B3B1CFEDDB1007C4278 = { 293 | CreatedOnToolsVersion = 7.3.1; 294 | DevelopmentTeam = 34MUF9YXTA; 295 | LastSwiftMigration = 1020; 296 | }; 297 | 8444B0EB1C80238500B53B4E = { 298 | CreatedOnToolsVersion = 7.2.1; 299 | DevelopmentTeam = 34MUF9YXTA; 300 | LastSwiftMigration = 1020; 301 | }; 302 | }; 303 | }; 304 | buildConfigurationList = 8444B0E71C80238500B53B4E /* Build configuration list for PBXProject "NavigationStackDemo" */; 305 | compatibilityVersion = "Xcode 6.3"; 306 | developmentRegion = en; 307 | hasScannedForEncodings = 0; 308 | knownRegions = ( 309 | en, 310 | Base, 311 | ); 312 | mainGroup = 8444B0E31C80238500B53B4E; 313 | productRefGroup = 8444B0ED1C80238500B53B4E /* Products */; 314 | projectDirPath = ""; 315 | projectRoot = ""; 316 | targets = ( 317 | 8444B0EB1C80238500B53B4E /* NavigationStackDemo */, 318 | 84368B3B1CFEDDB1007C4278 /* NavigationStack */, 319 | ); 320 | }; 321 | /* End PBXProject section */ 322 | 323 | /* Begin PBXResourcesBuildPhase section */ 324 | 84368B3A1CFEDDB1007C4278 /* Resources */ = { 325 | isa = PBXResourcesBuildPhase; 326 | buildActionMask = 2147483647; 327 | files = ( 328 | ); 329 | runOnlyForDeploymentPostprocessing = 0; 330 | }; 331 | 8444B0EA1C80238500B53B4E /* Resources */ = { 332 | isa = PBXResourcesBuildPhase; 333 | buildActionMask = 2147483647; 334 | files = ( 335 | 84B820991C8AE00E00939EE7 /* OpenSans-Semibold.ttf in Resources */, 336 | 846302891C8ABC340015CD81 /* OpenSans-Regular.ttf in Resources */, 337 | 8444B0FA1C80238500B53B4E /* LaunchScreen.storyboard in Resources */, 338 | 8444B0F71C80238500B53B4E /* Assets.xcassets in Resources */, 339 | 84E8E5A61C89D2C800A8B640 /* OpenSans-Light.ttf in Resources */, 340 | 8444B0F51C80238500B53B4E /* Main.storyboard in Resources */, 341 | ); 342 | runOnlyForDeploymentPostprocessing = 0; 343 | }; 344 | /* End PBXResourcesBuildPhase section */ 345 | 346 | /* Begin PBXSourcesBuildPhase section */ 347 | 84368B371CFEDDB1007C4278 /* Sources */ = { 348 | isa = PBXSourcesBuildPhase; 349 | buildActionMask = 2147483647; 350 | files = ( 351 | 84368B491CFEDDBE007C4278 /* NavigationStack.swift in Sources */, 352 | 84368B4C1CFEDDCE007C4278 /* CollectionViewStackCell.swift in Sources */, 353 | 84368B4B1CFEDDC9007C4278 /* CollectionViewStackFlowLayout.swift in Sources */, 354 | 84368B4A1CFEDDC5007C4278 /* CollectionStackViewController.swift in Sources */, 355 | ); 356 | runOnlyForDeploymentPostprocessing = 0; 357 | }; 358 | 8444B0E81C80238500B53B4E /* Sources */ = { 359 | isa = PBXSourcesBuildPhase; 360 | buildActionMask = 2147483647; 361 | files = ( 362 | 847B0FB11C846C6100E2C54D /* SecondViewController.swift in Sources */, 363 | 847B0FA91C846B8100E2C54D /* FifthViewController.swift in Sources */, 364 | 8444B1271C80250A00B53B4E /* CollectionViewStackCell.swift in Sources */, 365 | 8444B1291C80250A00B53B4E /* CollectionStackViewController.swift in Sources */, 366 | 840D54101C8705FA00555605 /* FirstTableViewController.swift in Sources */, 367 | 8444B1281C80250A00B53B4E /* CollectionViewStackFlowLayout.swift in Sources */, 368 | 847B0FAD1C846B9200E2C54D /* ThirdViewController.swift in Sources */, 369 | 8444B12B1C80250A00B53B4E /* NavigationStack.swift in Sources */, 370 | 8444B0F01C80238500B53B4E /* AppDelegate.swift in Sources */, 371 | ); 372 | runOnlyForDeploymentPostprocessing = 0; 373 | }; 374 | /* End PBXSourcesBuildPhase section */ 375 | 376 | /* Begin PBXTargetDependency section */ 377 | 84368B421CFEDDB1007C4278 /* PBXTargetDependency */ = { 378 | isa = PBXTargetDependency; 379 | target = 84368B3B1CFEDDB1007C4278 /* NavigationStack */; 380 | targetProxy = 84368B411CFEDDB1007C4278 /* PBXContainerItemProxy */; 381 | }; 382 | /* End PBXTargetDependency section */ 383 | 384 | /* Begin PBXVariantGroup section */ 385 | 8444B0F31C80238500B53B4E /* Main.storyboard */ = { 386 | isa = PBXVariantGroup; 387 | children = ( 388 | 8444B0F41C80238500B53B4E /* Base */, 389 | ); 390 | name = Main.storyboard; 391 | sourceTree = ""; 392 | }; 393 | 8444B0F81C80238500B53B4E /* LaunchScreen.storyboard */ = { 394 | isa = PBXVariantGroup; 395 | children = ( 396 | 8444B0F91C80238500B53B4E /* Base */, 397 | ); 398 | name = LaunchScreen.storyboard; 399 | sourceTree = ""; 400 | }; 401 | /* End PBXVariantGroup section */ 402 | 403 | /* Begin XCBuildConfiguration section */ 404 | 84368B451CFEDDB1007C4278 /* Debug */ = { 405 | isa = XCBuildConfiguration; 406 | buildSettings = { 407 | CLANG_ANALYZER_NONNULL = YES; 408 | CODE_SIGN_IDENTITY = ""; 409 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 410 | CURRENT_PROJECT_VERSION = 1; 411 | DEFINES_MODULE = YES; 412 | DYLIB_COMPATIBILITY_VERSION = 1; 413 | DYLIB_CURRENT_VERSION = 1; 414 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 415 | INFOPLIST_FILE = NavigationStack/Info.plist; 416 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 417 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 418 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 419 | PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.NavigationStack; 420 | PRODUCT_NAME = "$(TARGET_NAME)"; 421 | SKIP_INSTALL = YES; 422 | SWIFT_VERSION = 5.0; 423 | TARGETED_DEVICE_FAMILY = "1,2"; 424 | VERSIONING_SYSTEM = "apple-generic"; 425 | VERSION_INFO_PREFIX = ""; 426 | }; 427 | name = Debug; 428 | }; 429 | 84368B461CFEDDB1007C4278 /* Release */ = { 430 | isa = XCBuildConfiguration; 431 | buildSettings = { 432 | CLANG_ANALYZER_NONNULL = YES; 433 | CODE_SIGN_IDENTITY = ""; 434 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 435 | CURRENT_PROJECT_VERSION = 1; 436 | DEFINES_MODULE = YES; 437 | DYLIB_COMPATIBILITY_VERSION = 1; 438 | DYLIB_CURRENT_VERSION = 1; 439 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 440 | INFOPLIST_FILE = NavigationStack/Info.plist; 441 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 442 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 443 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 444 | PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.NavigationStack; 445 | PRODUCT_NAME = "$(TARGET_NAME)"; 446 | SKIP_INSTALL = YES; 447 | SWIFT_VERSION = 5.0; 448 | TARGETED_DEVICE_FAMILY = "1,2"; 449 | VERSIONING_SYSTEM = "apple-generic"; 450 | VERSION_INFO_PREFIX = ""; 451 | }; 452 | name = Release; 453 | }; 454 | 8444B1121C80238500B53B4E /* Debug */ = { 455 | isa = XCBuildConfiguration; 456 | buildSettings = { 457 | ALWAYS_SEARCH_USER_PATHS = NO; 458 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 459 | CLANG_CXX_LIBRARY = "libc++"; 460 | CLANG_ENABLE_MODULES = YES; 461 | CLANG_ENABLE_OBJC_ARC = YES; 462 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 463 | CLANG_WARN_BOOL_CONVERSION = YES; 464 | CLANG_WARN_COMMA = YES; 465 | CLANG_WARN_CONSTANT_CONVERSION = YES; 466 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 467 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 468 | CLANG_WARN_EMPTY_BODY = YES; 469 | CLANG_WARN_ENUM_CONVERSION = YES; 470 | CLANG_WARN_INFINITE_RECURSION = YES; 471 | CLANG_WARN_INT_CONVERSION = YES; 472 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 473 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 474 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 475 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 476 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 477 | CLANG_WARN_STRICT_PROTOTYPES = YES; 478 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 479 | CLANG_WARN_UNREACHABLE_CODE = YES; 480 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 481 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 482 | COPY_PHASE_STRIP = NO; 483 | DEBUG_INFORMATION_FORMAT = dwarf; 484 | ENABLE_STRICT_OBJC_MSGSEND = YES; 485 | ENABLE_TESTABILITY = YES; 486 | GCC_C_LANGUAGE_STANDARD = gnu99; 487 | GCC_DYNAMIC_NO_PIC = NO; 488 | GCC_NO_COMMON_BLOCKS = YES; 489 | GCC_OPTIMIZATION_LEVEL = 0; 490 | GCC_PREPROCESSOR_DEFINITIONS = ( 491 | "DEBUG=1", 492 | "$(inherited)", 493 | ); 494 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 495 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 496 | GCC_WARN_UNDECLARED_SELECTOR = YES; 497 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 498 | GCC_WARN_UNUSED_FUNCTION = YES; 499 | GCC_WARN_UNUSED_VARIABLE = YES; 500 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 501 | MTL_ENABLE_DEBUG_INFO = YES; 502 | ONLY_ACTIVE_ARCH = YES; 503 | SDKROOT = iphoneos; 504 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 505 | }; 506 | name = Debug; 507 | }; 508 | 8444B1131C80238500B53B4E /* Release */ = { 509 | isa = XCBuildConfiguration; 510 | buildSettings = { 511 | ALWAYS_SEARCH_USER_PATHS = NO; 512 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 513 | CLANG_CXX_LIBRARY = "libc++"; 514 | CLANG_ENABLE_MODULES = YES; 515 | CLANG_ENABLE_OBJC_ARC = YES; 516 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 517 | CLANG_WARN_BOOL_CONVERSION = YES; 518 | CLANG_WARN_COMMA = YES; 519 | CLANG_WARN_CONSTANT_CONVERSION = YES; 520 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 521 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 522 | CLANG_WARN_EMPTY_BODY = YES; 523 | CLANG_WARN_ENUM_CONVERSION = YES; 524 | CLANG_WARN_INFINITE_RECURSION = YES; 525 | CLANG_WARN_INT_CONVERSION = YES; 526 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 527 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 528 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 529 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 530 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 531 | CLANG_WARN_STRICT_PROTOTYPES = YES; 532 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 533 | CLANG_WARN_UNREACHABLE_CODE = YES; 534 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 535 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 536 | COPY_PHASE_STRIP = NO; 537 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 538 | ENABLE_NS_ASSERTIONS = NO; 539 | ENABLE_STRICT_OBJC_MSGSEND = YES; 540 | GCC_C_LANGUAGE_STANDARD = gnu99; 541 | GCC_NO_COMMON_BLOCKS = YES; 542 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 543 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 544 | GCC_WARN_UNDECLARED_SELECTOR = YES; 545 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 546 | GCC_WARN_UNUSED_FUNCTION = YES; 547 | GCC_WARN_UNUSED_VARIABLE = YES; 548 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 549 | MTL_ENABLE_DEBUG_INFO = NO; 550 | SDKROOT = iphoneos; 551 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 552 | VALIDATE_PRODUCT = YES; 553 | }; 554 | name = Release; 555 | }; 556 | 8444B1151C80238500B53B4E /* Debug */ = { 557 | isa = XCBuildConfiguration; 558 | buildSettings = { 559 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 560 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 561 | CODE_SIGN_IDENTITY = "iPhone Developer"; 562 | INFOPLIST_FILE = NavigationStackDemo/Info.plist; 563 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 564 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 565 | PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.NavigationStackDemo; 566 | PRODUCT_NAME = "Navigation Stack"; 567 | SWIFT_VERSION = 5.0; 568 | }; 569 | name = Debug; 570 | }; 571 | 8444B1161C80238500B53B4E /* Release */ = { 572 | isa = XCBuildConfiguration; 573 | buildSettings = { 574 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 575 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 576 | CODE_SIGN_IDENTITY = "iPhone Developer"; 577 | INFOPLIST_FILE = NavigationStackDemo/Info.plist; 578 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 579 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 580 | PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.NavigationStackDemo; 581 | PRODUCT_NAME = "Navigation Stack"; 582 | SWIFT_VERSION = 5.0; 583 | }; 584 | name = Release; 585 | }; 586 | /* End XCBuildConfiguration section */ 587 | 588 | /* Begin XCConfigurationList section */ 589 | 84368B471CFEDDB1007C4278 /* Build configuration list for PBXNativeTarget "NavigationStack" */ = { 590 | isa = XCConfigurationList; 591 | buildConfigurations = ( 592 | 84368B451CFEDDB1007C4278 /* Debug */, 593 | 84368B461CFEDDB1007C4278 /* Release */, 594 | ); 595 | defaultConfigurationIsVisible = 0; 596 | defaultConfigurationName = Release; 597 | }; 598 | 8444B0E71C80238500B53B4E /* Build configuration list for PBXProject "NavigationStackDemo" */ = { 599 | isa = XCConfigurationList; 600 | buildConfigurations = ( 601 | 8444B1121C80238500B53B4E /* Debug */, 602 | 8444B1131C80238500B53B4E /* Release */, 603 | ); 604 | defaultConfigurationIsVisible = 0; 605 | defaultConfigurationName = Release; 606 | }; 607 | 8444B1141C80238500B53B4E /* Build configuration list for PBXNativeTarget "NavigationStackDemo" */ = { 608 | isa = XCConfigurationList; 609 | buildConfigurations = ( 610 | 8444B1151C80238500B53B4E /* Debug */, 611 | 8444B1161C80238500B53B4E /* Release */, 612 | ); 613 | defaultConfigurationIsVisible = 0; 614 | defaultConfigurationName = Release; 615 | }; 616 | /* End XCConfigurationList section */ 617 | }; 618 | rootObject = 8444B0E41C80238500B53B4E /* Project object */; 619 | } 620 | -------------------------------------------------------------------------------- /NavigationStackDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /NavigationStackDemo.xcodeproj/xcshareddata/xcschemes/NavigationStack.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 52 | 53 | 59 | 60 | 66 | 67 | 68 | 69 | 71 | 72 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /NavigationStackDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // NavigationStackDemo 4 | // 5 | // Copyright (c) 26/02/16 Ramotion Inc. (http://ramotion.com) 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | 25 | import UIKit 26 | 27 | @UIApplicationMain 28 | class AppDelegate: UIResponder, UIApplicationDelegate { 29 | 30 | var window: UIWindow? 31 | 32 | func application(_ : UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 33 | 34 | UIApplication.shared.statusBarStyle = .lightContent 35 | 36 | UINavigationBar.appearance().titleTextAttributes = [ 37 | NSAttributedString.Key.foregroundColor: UIColor.white, 38 | NSAttributedString.Key.font: UIFont(name: "OpenSans-Semibold", size: 16)!, 39 | ] 40 | 41 | return true 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "icon-40.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "icon-60.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-58.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "icon-87.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "icon-80.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "icon-120.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "icon-120.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "icon-180.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "icon-20.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "icon-40.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "icon-29.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "icon-58.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "icon-40.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "icon-80.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "icon-76.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "icon-152.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "icon-167.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "Ramotion.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | }, 116 | "properties" : { 117 | "pre-rendered" : true 118 | } 119 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/Ramotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/Ramotion.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-120.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-152.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-167.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-180.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-20.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-58.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-60.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-80.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/AppIcon.appiconset/icon-87.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/ButtonBorder.imageset/ButtonBorder.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Fifth/ButtonBorder.imageset/ButtonBorder.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/ButtonBorder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "ButtonBorder.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Fifth-Icon-0.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-0.imageset/Fifth-Icon-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-0.imageset/Fifth-Icon-0.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Fifth-Icon-1.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-1.imageset/Fifth-Icon-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-1.imageset/Fifth-Icon-1.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Fifth-Icon-2.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-2.imageset/Fifth-Icon-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-2.imageset/Fifth-Icon-2.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Fifth-Icon-3.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-3.imageset/Fifth-Icon-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Fifth/Fifth-Icon-3.imageset/Fifth-Icon-3.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/Arrow.imageset/Arrow.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/First/icons/Arrow.imageset/Arrow.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/Arrow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "scale" : "1x" 9 | }, 10 | { 11 | "idiom" : "universal", 12 | "filename" : "Arrow.pdf", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon-0.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-0.imageset/icon-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/First/icons/icon-0.imageset/icon-0.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon-1.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-1.imageset/icon-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/First/icons/icon-1.imageset/icon-1.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon-2.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-2.imageset/icon-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/First/icons/icon-2.imageset/icon-2.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon-3.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-3.imageset/icon-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/First/icons/icon-3.imageset/icon-3.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon-4.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/First/icons/icon-4.imageset/icon-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/First/icons/icon-4.imageset/icon-4.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/GirlsBig.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "GirlsBig.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/GirlsBig.imageset/GirlsBig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Four/GirlsBig.imageset/GirlsBig.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/NYbg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "NYbg.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/NYbg.imageset/NYbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Four/NYbg.imageset/NYbg.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/faceIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "faceIcon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/faceIcon.imageset/faceIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Four/faceIcon.imageset/faceIcon.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/foodIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "foodIcon.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Four/foodIcon.imageset/foodIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Four/foodIcon.imageset/foodIcon.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/BridgeImage.imageset/BridgeImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/BridgeImage.imageset/BridgeImage.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/BridgeImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "BridgeImage.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/DotsIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "DotsIcon.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/DotsIcon.imageset/DotsIcon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/DotsIcon.imageset/DotsIcon.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/HeadnImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "HeadnImage.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/HeadnImage.imageset/HeadnImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/HeadnImage.imageset/HeadnImage.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/PCImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "PCImage.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/PCImage.imageset/PCImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/PCImage.imageset/PCImage.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/PersonIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "PersonIcon.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/PersonIcon.imageset/PersonIcon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/PersonIcon.imageset/PersonIcon.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/PinIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "PinIcon.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/PinIcon.imageset/PinIcon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/PinIcon.imageset/PinIcon.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/RamotionBig.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "RamotionBig.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/RamotionBig.imageset/RamotionBig.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/RamotionBig.imageset/RamotionBig.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/backButton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "backButton.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Second/backButton.imageset/backButton.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Second/backButton.imageset/backButton.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Third/BGmessage.imageset/BGmessage.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Third/BGmessage.imageset/BGmessage.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Third/BGmessage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "BGmessage.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Third/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Third/girsl.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "girsl.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/Third/girsl.imageset/girsl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/Third/girsl.imageset/girsl.png -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/arrow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "arrow.pdf", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/arrow.imageset/arrow.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/arrow.imageset/arrow.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "back.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /NavigationStackDemo/Assets.xcassets/back.imageset/back.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/NavigationStackDemo/Assets.xcassets/back.imageset/back.pdf -------------------------------------------------------------------------------- /NavigationStackDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /NavigationStackDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIAppFonts 26 | 27 | OpenSans-Semibold.ttf 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIMainStoryboardFile 32 | Main 33 | UIRequiredDeviceCapabilities 34 | 35 | armv7 36 | 37 | UIStatusBarHidden 38 | 39 | UISupportedInterfaceOrientations 40 | 41 | UIInterfaceOrientationPortrait 42 | 43 | UIViewControllerBasedStatusBarAppearance 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /NavigationStackDemo/ViewControllers/FifthViewController/FifthViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FifthViewController.swift 3 | // NavigationStackDemo 4 | // 5 | // Created by Alex K. on 29/02/16. 6 | // Copyright © 2016 Alex K. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FifthViewController: UITableViewController { 12 | 13 | @IBAction func backHandler(_: AnyObject) { 14 | _ = navigationController?.popViewController(animated: true) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /NavigationStackDemo/ViewControllers/FirstViewController/FirstTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FirstTableViewController.swift 3 | // NavigationStackDemo 4 | // 5 | // Created by Alex K. on 29/02/16. 6 | // Copyright © 2016 Alex K. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | // MARK: FirstTableViewController 12 | 13 | class FirstTableViewController: UITableViewController { 14 | 15 | @IBOutlet var search: UISearchBar! 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | navigationController!.interactivePopGestureRecognizer?.delegate = self 20 | 21 | navigationItem.titleView = search 22 | } 23 | 24 | override func viewWillAppear(_ animated: Bool) { 25 | super.viewWillAppear(animated) 26 | 27 | if let navigationController = navigationController { 28 | navigationController.navigationBar.barTintColor = UIColor(red: 0.4, green: 0.47, blue: 0.62, alpha: 1) 29 | } 30 | } 31 | 32 | override func tableView(_: UITableView, didSelectRowAt _: IndexPath) { 33 | performSegue(withIdentifier: "push", sender: nil) 34 | } 35 | } 36 | 37 | // MARK: UIGestureRecognizerDelegate 38 | 39 | extension FirstTableViewController: UIGestureRecognizerDelegate { 40 | func gestureRecognizerShouldBegin(_: UIGestureRecognizer) -> Bool { 41 | 42 | if navigationController?.viewControllers.count == 2 { 43 | return true 44 | } 45 | 46 | if let navigationController = self.navigationController as? NavigationStack { 47 | navigationController.showControllers() 48 | } 49 | 50 | return false 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /NavigationStackDemo/ViewControllers/SecondViewController/SecondViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SecondViewController.swift 3 | // NavigationStackDemo 4 | // 5 | // Created by Alex K. on 29/02/16. 6 | // Copyright © 2016 Alex K. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SecondViewController: UITableViewController { 12 | 13 | override func viewWillAppear(_ animated: Bool) { 14 | super.viewWillAppear(animated) 15 | 16 | // if let navigationController = navigationController { 17 | //// navigationController.navigationBar.barTintColor = UIColor(red:0.61, green:0.86, blue:0.87, alpha:1) 18 | //// tableView.contentOffset = CGPoint(x: 0, y: -44) 19 | //// navigationController.navigationBar.translucent = true 20 | // } 21 | } 22 | 23 | @IBAction func backHandler(_: AnyObject) { 24 | _ = navigationController?.popViewController(animated: true) 25 | } 26 | 27 | override func tableView(_: UITableView, didSelectRowAt _: IndexPath) { 28 | performSegue(withIdentifier: "push", sender: nil) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /NavigationStackDemo/ViewControllers/ThirdViewController/ThirdViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThirdViewController.swift 3 | // NavigationStackDemo 4 | // 5 | // Created by Alex K. on 29/02/16. 6 | // Copyright © 2016 Alex K. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ThirdViewController: UITableViewController { 12 | 13 | @IBInspectable var navbarColor: UIColor = .black 14 | 15 | override func viewWillAppear(_ animated: Bool) { 16 | super.viewWillAppear(animated) 17 | } 18 | 19 | @IBAction func backHandler(_: AnyObject) { 20 | _ = navigationController?.popViewController(animated: true) 21 | } 22 | 23 | override func tableView(_: UITableView, didSelectRowAt _: IndexPath) { 24 | performSegue(withIdentifier: "push", sender: nil) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.1 2 | // 3 | // Package.swift 4 | // 5 | // Copyright (c) Ramotion (https://www.ramotion.com/) 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | // 25 | 26 | import PackageDescription 27 | 28 | 29 | let package = Package( 30 | name: "NavigationStack", 31 | platforms: [ 32 | .iOS(.v8) 33 | ], 34 | products: [ 35 | .library(name: "NavigationStack", 36 | targets: ["NavigationStack"]), 37 | ], 38 | targets: [ 39 | .target(name: "NavigationStack", 40 | path: "Source") 41 | ], 42 | swiftLanguageVersions: [.v5] 43 | ) 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

NAVIGATION STACK

7 | 8 |

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

9 | 10 | 11 | ___ 12 | 13 | 14 | 15 |

We specialize in the designing and coding of custom UI for Mobile Apps and Websites.
16 | 17 | 18 |

19 |

Stay tuned for the latest updates:
20 | 21 |

22 | 23 |
24 | 25 | [![Twitter](https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat)](http://twitter.com/Ramotion) 26 | [![CocoaPods](https://img.shields.io/cocoapods/p/Navigation-stack.svg)](https://cocoapods.org/pods/Navigation-stack) 27 | [![CocoaPods](https://img.shields.io/cocoapods/v/Navigation-stack.svg)](http://cocoapods.org/pods/Navigation-stack) 28 | [![CocoaPods](https://img.shields.io/cocoapods/metrics/doc-percent/Navigation-stack.svg)](https://cdn.rawgit.com/Ramotion/navigation-stack/master/docs/index.html) 29 | [![Travis](https://img.shields.io/travis/Ramotion/navigation-stack.svg)](https://travis-ci.org/Ramotion/navigation-stack) 30 | [![codebeat badge](https://codebeat.co/badges/c322a039-b06b-46d9-bf40-e48cf0365b97)](https://codebeat.co/projects/github-com-ramotion-navigation-stack) 31 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Ramotion/navigation-stack) 32 | [![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://paypal.me/Ramotion) 33 | 34 | ## Requirements 35 | 36 | - iOS 9.0+ 37 | - Xcode 9 38 | 39 | ## Installation 40 | 41 | Just add the Source folder to your project. 42 | 43 | or use [CocoaPods](https://cocoapods.org) with Podfile: 44 | ``` ruby 45 | pod 'Navigation-stack' 46 | ``` 47 | 48 | or [Carthage](https://github.com/Carthage/Carthage) users can simply add to their `Cartfile`: 49 | ``` 50 | github "Ramotion/navigation-stack" 51 | ``` 52 | 53 | ## Usage 54 | 55 | 1) YourNavigationController inherit from `NavigationStack` 56 | 57 | 2) add code to root viewViewController 58 | 59 | ``` swift 60 | override func viewDidLoad() { 61 | super.viewDidLoad() 62 | navigationController!.interactivePopGestureRecognizer?.delegate = self 63 | } 64 | ``` 65 | 66 | ``` swift 67 | extension YourViewController: UIGestureRecognizerDelegate { 68 | func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { 69 | 70 | if navigationController?.viewControllers.count == 2 { 71 | return true 72 | } 73 | 74 | if let navigationController = self.navigationController as? NavigationStack { 75 | navigationController.showControllers() 76 | } 77 | 78 | return false 79 | } 80 | } 81 | ``` 82 | 83 | ## 📄 License 84 | 85 | Navigation Stack is released under the MIT license. 86 | See [LICENSE](./LICENSE) for details. 87 | 88 | This library is a part of a selection of our best UI open-source projects. 89 | 90 | If you use the open-source library in your project, please make sure to credit and backlink to www.ramotion.com 91 | 92 | ## 📱 Get the Showroom App for iOS to give it a try 93 | Try this UI component and more like this in our iOS app. Contact us if interested. 94 | 95 | 96 | 97 | 98 | 99 | 100 |
101 |
102 | -------------------------------------------------------------------------------- /React Native@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/React Native@2x.png -------------------------------------------------------------------------------- /Source/CollectionView/Cell/CollectionViewStackCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionViewStackCell.swift 3 | // NavigationStackDemo 4 | // 5 | // Copyright (c) 26/02/16 Ramotion Inc. (http://ramotion.com) 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | 25 | import UIKit 26 | 27 | // MARK: CollectionViewStackCell 28 | 29 | class CollectionViewStackCell: UICollectionViewCell { 30 | 31 | internal var imageView: UIImageView? 32 | 33 | override init(frame: CGRect) { 34 | super.init(frame: frame) 35 | imageView = createImageView() 36 | createShadow() 37 | } 38 | 39 | required init?(coder _: NSCoder) { 40 | fatalError("init(coder:) has not been implemented") 41 | } 42 | 43 | internal override func prepareForReuse() { 44 | imageView?.image = nil 45 | } 46 | } 47 | 48 | // MARK: configure 49 | 50 | extension CollectionViewStackCell { 51 | 52 | fileprivate func createImageView() -> UIImageView { 53 | 54 | let imageView = UIImageView(frame: CGRect.zero) 55 | imageView.translatesAutoresizingMaskIntoConstraints = false 56 | imageView.layer.shouldRasterize = true 57 | contentView.addSubview(imageView) 58 | 59 | contentView.addConstraints([ 60 | createConstraint(imageView, toItem: contentView, attribute: .top), 61 | createConstraint(imageView, toItem: contentView, attribute: .bottom), 62 | createConstraint(imageView, toItem: contentView, attribute: .left), 63 | createConstraint(imageView, toItem: contentView, attribute: .right), 64 | ]) 65 | 66 | return imageView 67 | } 68 | 69 | fileprivate func createConstraint(_ item: UIImageView, toItem: UIView, attribute: NSLayoutConstraint.Attribute) -> NSLayoutConstraint { 70 | return NSLayoutConstraint(item: item, 71 | attribute: attribute, 72 | relatedBy: .equal, 73 | toItem: toItem, 74 | attribute: attribute, 75 | multiplier: 1, 76 | constant: 0) 77 | } 78 | 79 | fileprivate func createShadow() { 80 | layer.masksToBounds = false 81 | layer.shadowOpacity = 0.30 82 | layer.shadowRadius = 10.0 83 | layer.shadowOffset = CGSize.zero 84 | layer.shadowPath = UIBezierPath(rect: bounds).cgPath 85 | layer.shouldRasterize = true 86 | layer.rasterizationScale = max(UIScreen.main.scale, 2.0) 87 | } 88 | 89 | fileprivate func addBlurOnImage(_: UIImageView) { 90 | 91 | let blurEffect = UIBlurEffect(style: .dark) 92 | let blurView = UIVisualEffectView(effect: blurEffect) 93 | blurView.translatesAutoresizingMaskIntoConstraints = false 94 | imageView!.insertSubview(blurView, at: 3) 95 | 96 | let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect) 97 | let vibrancyView = UIVisualEffectView(effect: vibrancyEffect) 98 | vibrancyView.translatesAutoresizingMaskIntoConstraints = false 99 | blurView.contentView.addSubview(vibrancyView) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /Source/CollectionView/CollectionStackViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionStackViewController.swift 3 | // NavigationStackDemo 4 | // 5 | // Copyright (c) 26/02/16 Ramotion Inc. (http://ramotion.com) 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | 25 | import UIKit 26 | fileprivate func < (lhs: T?, rhs: T?) -> Bool { 27 | switch (lhs, rhs) { 28 | case let (l?, r?): 29 | return l < r 30 | case (nil, _?): 31 | return true 32 | default: 33 | return false 34 | } 35 | } 36 | 37 | // MARK: CollectionStackViewController 38 | 39 | protocol CollectionStackViewControllerDelegate: class { 40 | func controllerDidSelected(index: Int) 41 | } 42 | 43 | class CollectionStackViewController: UICollectionViewController { 44 | fileprivate var screens: [UIImage] 45 | fileprivate let overlay: Float 46 | 47 | weak var delegate: CollectionStackViewControllerDelegate? 48 | 49 | init(images: [UIImage], 50 | delegate: CollectionStackViewControllerDelegate?, 51 | overlay: Float, 52 | scaleRatio: Float, 53 | scaleValue: Float, 54 | bgColor: UIColor = UIColor.clear, 55 | bgView: UIView? = nil, 56 | decelerationRate: CGFloat) { 57 | 58 | screens = images 59 | self.delegate = delegate 60 | self.overlay = overlay 61 | 62 | let layout = CollectionViewStackFlowLayout(itemsCount: images.count, overlay: overlay, scaleRatio: scaleRatio, scale: scaleValue) 63 | super.init(collectionViewLayout: layout) 64 | 65 | if let collectionView = self.collectionView { 66 | collectionView.backgroundColor = bgColor 67 | collectionView.backgroundView = bgView 68 | collectionView.decelerationRate = UIScrollView.DecelerationRate(rawValue: decelerationRate) 69 | } 70 | } 71 | 72 | required init?(coder _: NSCoder) { 73 | fatalError("init(coder:) has not been implemented") 74 | } 75 | 76 | override func viewDidLoad() { 77 | configureCollectionView() 78 | scrolltoIndex(screens.count - 1, animated: false, position: .left) // move to end 79 | } 80 | 81 | override func viewDidAppear(_: Bool) { 82 | 83 | guard let collectionViewLayout = self.collectionViewLayout as? CollectionViewStackFlowLayout else { 84 | fatalError("wrong collection layout") 85 | } 86 | 87 | collectionViewLayout.openAnimating = true 88 | scrolltoIndex(0, animated: true, position: .left) // open animation 89 | } 90 | } 91 | 92 | // MARK: configure 93 | 94 | extension CollectionStackViewController { 95 | 96 | fileprivate func configureCollectionView() { 97 | guard let collectionViewLayout = self.collectionViewLayout as? UICollectionViewFlowLayout else { 98 | fatalError("wrong collection layout") 99 | } 100 | 101 | collectionViewLayout.scrollDirection = .horizontal 102 | collectionView?.showsHorizontalScrollIndicator = false 103 | collectionView?.register(CollectionViewStackCell.self, forCellWithReuseIdentifier: String(describing: CollectionViewStackCell.self)) 104 | } 105 | } 106 | 107 | // MARK: CollectionViewDataSource 108 | 109 | extension CollectionStackViewController { 110 | 111 | override func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int { 112 | return screens.count 113 | } 114 | 115 | override func collectionView(_: UICollectionView, 116 | willDisplay cell: UICollectionViewCell, 117 | forItemAt indexPath: IndexPath) { 118 | 119 | if let cell = cell as? CollectionViewStackCell { 120 | cell.imageView?.image = screens[(indexPath as NSIndexPath).row] 121 | } 122 | } 123 | 124 | override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 125 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: CollectionViewStackCell.self), 126 | for: indexPath) 127 | return cell 128 | } 129 | 130 | override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 131 | guard let currentCell = collectionView.cellForItem(at: indexPath) else { 132 | return 133 | } 134 | 135 | // move cells 136 | UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseIn, 137 | animations: { () -> Void in 138 | for cell in self.collectionView!.visibleCells where cell != currentCell { 139 | let row = (self.collectionView?.indexPath(for: cell) as NSIndexPath?)?.row 140 | let xPosition = row < (indexPath as NSIndexPath).row ? cell.center.x - self.view.bounds.size.width * 2 141 | : cell.center.x + self.view.bounds.size.width * 2 142 | 143 | cell.center = CGPoint(x: xPosition, y: cell.center.y) 144 | } 145 | }, completion: nil) 146 | 147 | // move to center current cell 148 | UIView.animate(withDuration: 0.2, delay: 0.2, options: .curveEaseOut, 149 | animations: { () -> Void in 150 | let offset = collectionView.contentOffset.x - (self.view.bounds.size.width - collectionView.bounds.size.width * CGFloat(self.overlay)) * CGFloat((indexPath as NSIndexPath).row) 151 | currentCell.center = CGPoint(x: (currentCell.center.x + offset), y: currentCell.center.y) 152 | }, completion: nil) 153 | 154 | // scale current cell 155 | UIView.animate(withDuration: 0.2, delay: 0.6, options: .curveEaseOut, animations: { () -> Void in 156 | let scale = CGAffineTransform(scaleX: 1, y: 1) 157 | currentCell.transform = scale 158 | currentCell.alpha = 1 159 | 160 | }) { (_) -> Void in 161 | DispatchQueue.main.async(execute: { () -> Void in 162 | self.delegate?.controllerDidSelected(index: (indexPath as NSIndexPath).row) 163 | self.dismiss(animated: false, completion: nil) 164 | }) 165 | } 166 | } 167 | } 168 | 169 | // MARK: UICollectionViewDelegateFlowLayout 170 | 171 | extension CollectionStackViewController: UICollectionViewDelegateFlowLayout { 172 | 173 | func collectionView(_: UICollectionView, layout _: UICollectionViewLayout, sizeForItemAt _: IndexPath) -> CGSize { 174 | return view.bounds.size 175 | } 176 | 177 | func collectionView(_ collectionView: UICollectionView, layout _: UICollectionViewLayout, minimumLineSpacingForSectionAt _: NSInteger) -> CGFloat { 178 | return -collectionView.bounds.size.width * CGFloat(overlay) 179 | } 180 | } 181 | 182 | // MARK: Additional helpers 183 | 184 | extension CollectionStackViewController { 185 | 186 | fileprivate func scrolltoIndex(_ index: Int, animated: Bool, position: UICollectionView.ScrollPosition) { 187 | let indexPath = IndexPath(item: index, section: 0) 188 | collectionView?.scrollToItem(at: indexPath, at: position, animated: animated) 189 | } 190 | } 191 | -------------------------------------------------------------------------------- /Source/CollectionView/FlowLayout/CollectionViewStackFlowLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionViewStackFlowLayout.swift 3 | // NavigationStackDemo 4 | // 5 | // Copyright (c) 26/02/16 Ramotion Inc. (http://ramotion.com) 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | 25 | import UIKit 26 | 27 | // MARK: CollectionViewStackFlowLayout 28 | 29 | class CollectionViewStackFlowLayout: UICollectionViewFlowLayout { 30 | 31 | let itemsCount: Int 32 | let overlay: Float // from 0 to 1 33 | 34 | let maxScale: Float 35 | let scaleRatio: Float 36 | 37 | var additionScale = 1.0 38 | var openAnimating = false 39 | 40 | var dxOffset: Float = 0 41 | 42 | init(itemsCount: Int, overlay: Float, scaleRatio: Float, scale: Float) { 43 | self.itemsCount = itemsCount 44 | self.overlay = overlay 45 | self.scaleRatio = scaleRatio 46 | maxScale = scale 47 | super.init() 48 | } 49 | 50 | required init?(coder _: NSCoder) { 51 | fatalError("init(coder:) has not been implemented") 52 | } 53 | } 54 | 55 | extension CollectionViewStackFlowLayout { 56 | 57 | override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 58 | let items = NSArray(array: super.layoutAttributesForElements(in: rect)!, copyItems: true) 59 | var headerAttributes: UICollectionViewLayoutAttributes? 60 | 61 | items.enumerateObjects({ (object, _, _) -> Void in 62 | let attributes = object as! UICollectionViewLayoutAttributes 63 | 64 | if attributes.representedElementKind == UICollectionView.elementKindSectionHeader { 65 | headerAttributes = attributes 66 | } else { 67 | self.updateCellAttributes(attributes, headerAttributes: headerAttributes) 68 | } 69 | }) 70 | return items as? [UICollectionViewLayoutAttributes] 71 | } 72 | 73 | func updateCellAttributes(_ attributes: UICollectionViewLayoutAttributes, headerAttributes _: UICollectionViewLayoutAttributes?) { 74 | 75 | guard let collectionView = self.collectionView else { 76 | return 77 | } 78 | let itemWidth = collectionView.bounds.size.width - collectionView.bounds.size.width * CGFloat(overlay) 79 | let allWidth = itemWidth * CGFloat(itemsCount - 1) 80 | 81 | // set contentOffset range 82 | let contentOffsetX = min(max(0, collectionView.contentOffset.x), allWidth) 83 | 84 | let scale = transformScale(attributes, allWidth: allWidth, offset: contentOffsetX) 85 | let move = transformMove(attributes, itemWidth: itemWidth, offset: contentOffsetX) 86 | attributes.transform = scale.concatenating(move) 87 | attributes.alpha = calculateAlpha(attributes, itemWidth: itemWidth, offset: contentOffsetX) 88 | 89 | if additionScale > 0 && openAnimating { 90 | additionScale -= 0.02 91 | additionScale = additionScale < 0 ? 0 : additionScale 92 | } 93 | attributes.zIndex = (attributes.indexPath as NSIndexPath).row 94 | } 95 | 96 | override func shouldInvalidateLayout(forBoundsChange _: CGRect) -> Bool { 97 | return true 98 | } 99 | } 100 | 101 | // MARK: helpers 102 | 103 | extension CollectionViewStackFlowLayout { 104 | 105 | fileprivate func transformScale(_ attributes: UICollectionViewLayoutAttributes, 106 | allWidth: CGFloat, 107 | offset: CGFloat) -> CGAffineTransform { 108 | var maximum = CGFloat(maxScale) - CGFloat(itemsCount - (attributes.indexPath as NSIndexPath).row) / CGFloat(scaleRatio) 109 | maximum += CGFloat(1.0 - maximum) * CGFloat(additionScale) 110 | 111 | var minimum = CGFloat(maxScale - 0.1) - CGFloat(itemsCount - (attributes.indexPath as NSIndexPath).row) / CGFloat(scaleRatio) 112 | minimum += CGFloat(1.0 - minimum) * CGFloat(additionScale) 113 | 114 | var currentScale = (maximum + minimum) - (minimum + offset / (allWidth / (maximum - minimum))) 115 | currentScale = max(min(maximum, currentScale), minimum) 116 | return CGAffineTransform(scaleX: currentScale, y: currentScale) 117 | } 118 | 119 | fileprivate func transformMove(_ attributes: UICollectionViewLayoutAttributes, 120 | itemWidth: CGFloat, 121 | offset: CGFloat) -> CGAffineTransform { 122 | var currentContentOffsetX = offset - itemWidth * CGFloat((attributes.indexPath as NSIndexPath).row) 123 | currentContentOffsetX = min(max(currentContentOffsetX, 0), itemWidth) 124 | 125 | var dx = (currentContentOffsetX / itemWidth) 126 | if let collectionView = self.collectionView { 127 | dx *= collectionView.bounds.size.width / 8.0 128 | } 129 | dx = currentContentOffsetX - dx 130 | 131 | return CGAffineTransform(translationX: dx, y: 0) 132 | } 133 | 134 | fileprivate func calculateAlpha(_ attributes: UICollectionViewLayoutAttributes, itemWidth: CGFloat, offset: CGFloat) -> CGFloat { 135 | var currentContentOffsetX = offset - itemWidth * CGFloat((attributes.indexPath as NSIndexPath).row) 136 | currentContentOffsetX = min(max(currentContentOffsetX, 0), itemWidth) 137 | 138 | let dx = (currentContentOffsetX / itemWidth) 139 | 140 | return 1.0 - dx 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /Source/Fonts/OpenSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/Source/Fonts/OpenSans-Light.ttf -------------------------------------------------------------------------------- /Source/Fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/Source/Fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /Source/Fonts/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/Source/Fonts/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /Source/NavigationStack.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NavigationStack.swift 3 | // NavigationStackDemo 4 | // 5 | // Copyright (c) 26/02/16 Ramotion Inc. (http://ramotion.com) 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | 25 | import UIKit 26 | 27 | /// UINavigationcontroller with animation show lists of UIViewControllers 28 | open class NavigationStack: UINavigationController { 29 | 30 | var overlay: Float = 0.8 31 | var scaleRatio: Float = 14.0 32 | var scaleValue: Float = 0.99 33 | 34 | /// A floating-point value that determines the rate of deceleration after the user lifts their finger. 35 | @IBInspectable open var decelerationRate: CGFloat = UIScrollView.DecelerationRate.normal.rawValue 36 | 37 | /// The color to use for the background of the lists of UIViewcontrollers. 38 | @IBInspectable open var bgColor: UIColor = .black 39 | 40 | /// The background UIView of the lists of UIViewcontrollers. 41 | open var bgView: UIView? 42 | fileprivate var screens = [UIImage]() 43 | 44 | /// The delegate of the navigation controller object. Use this instead delegate. 45 | open weak var stackDelegate: UINavigationControllerDelegate? 46 | 47 | /** 48 | The initialized navigation controller object or nil if there was a problem initializing the object. 49 | 50 | - parameter aDecoder: aDecoder 51 | 52 | - returns: The initialized navigation controller object or nil if there was a problem initializing the object. 53 | */ 54 | public required init?(coder aDecoder: NSCoder) { 55 | super.init(coder: aDecoder) 56 | 57 | delegate = self 58 | } 59 | 60 | /** 61 | Initializes and returns a newly created navigation controller. 62 | 63 | - parameter rootViewController: The view controller that resides at the bottom of the navigation stack. 64 | 65 | - returns: The initialized navigation controller object or nil if there was a problem initializing the object. 66 | */ 67 | public override init(rootViewController: UIViewController) { 68 | super.init(rootViewController: rootViewController) 69 | 70 | delegate = self 71 | } 72 | 73 | /** 74 | Necessary to prevent a crash 75 | */ 76 | public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 77 | super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 78 | } 79 | } 80 | 81 | // MARK: pulbic methods 82 | 83 | extension NavigationStack { 84 | 85 | /** 86 | Show list of ViewControllers. 87 | */ 88 | public func showControllers() { 89 | if screens.count == 0 { 90 | return 91 | } 92 | 93 | var allScreens = screens 94 | allScreens.append(view.takeScreenshot()) 95 | let collectioView = CollectionStackViewController(images: allScreens, 96 | delegate: self, 97 | overlay: overlay, 98 | scaleRatio: scaleRatio, 99 | scaleValue: scaleValue, 100 | bgColor: bgColor, 101 | bgView: bgView, 102 | decelerationRate: decelerationRate) 103 | 104 | present(collectioView, animated: false, completion: nil) 105 | } 106 | } 107 | 108 | // MARK: UINavigationControllerDelegate 109 | 110 | extension NavigationStack: UINavigationControllerDelegate { 111 | 112 | public func navigationController(_ navigationController: UINavigationController, 113 | willShow viewController: UIViewController, 114 | animated: Bool) { 115 | 116 | stackDelegate?.navigationController?(navigationController, willShow: viewController, animated: animated) 117 | 118 | if navigationController.viewControllers.count > screens.count + 1 { 119 | screens.append(view.takeScreenshot()) 120 | } else 121 | if navigationController.viewControllers.count == screens.count && screens.count > 0 { 122 | screens.removeLast() 123 | } 124 | } 125 | 126 | public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { 127 | stackDelegate?.navigationController?(navigationController, didShow: viewController, animated: animated) 128 | } 129 | 130 | // ??? 131 | // public func navigationControllerSupportedInterfaceOrientations(navigationController: UINavigationController) -> UIInterfaceOrientationMask { 132 | // return stackDelegate?.navigationControllerSupportedInterfaceOrientations?(navigationController) 133 | // } 134 | 135 | // ??? 136 | // optional public func navigationControllerPreferredInterfaceOrientationForPresentation(navigationController: UINavigationController) -> UIInterfaceOrientation 137 | // 138 | 139 | public func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { 140 | return stackDelegate?.navigationController?(navigationController, interactionControllerFor: animationController) 141 | } 142 | 143 | public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 144 | return stackDelegate?.navigationController?(navigationController, animationControllerFor: operation, from: fromVC, to: toVC) 145 | } 146 | } 147 | 148 | extension NavigationStack: CollectionStackViewControllerDelegate { 149 | func controllerDidSelected(index: Int) { 150 | 151 | let newViewControllers = Array(viewControllers[0 ... index]) 152 | setViewControllers(newViewControllers, animated: false) 153 | screens.removeSubrange(index ..< screens.count) 154 | } 155 | } 156 | 157 | // MARK: UIView 158 | 159 | extension UIView { 160 | 161 | func takeScreenshot() -> UIImage { 162 | 163 | UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale) 164 | layer.render(in: UIGraphicsGetCurrentContext()!) 165 | 166 | let image = UIGraphicsGetImageFromCurrentImageContext() 167 | UIGraphicsEndImageContext() 168 | 169 | return image! 170 | } 171 | } 172 | -------------------------------------------------------------------------------- /Swift@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/Swift@2x.png -------------------------------------------------------------------------------- /contact_our_team@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/contact_our_team@2x.png -------------------------------------------------------------------------------- /docs/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

NavigationStackDemo Docs (69% documented)

17 |
18 |
19 |
20 | 25 |
26 |
27 | 39 |
40 |
41 |
42 |

Classes

43 |

The following classes are available globally.

44 | 45 |
46 |
47 |
48 |
    49 |
  • 50 |
    51 | 52 | 53 | 54 | NavigationStack 55 | 56 |
    57 |
    58 |
    59 |
    60 |
    61 |
    62 |

    UINavigationcontroller with animation show lists of UIViewControllers

    63 | 64 | See more 65 |
    66 |
    67 |

    Declaration

    68 |
    69 |

    Swift

    70 |
    public class NavigationStack: UINavigationController
    71 | 72 |
    73 |
    74 |
    75 |
    76 |
  • 77 |
78 |
79 |
80 |
81 | 85 |
86 |
87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /docs/Classes/NavigationStack.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NavigationStack Class Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

NavigationStackDemo Docs (69% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 40 |
41 |
42 |
43 |

NavigationStack

44 |
45 |
46 |
public class NavigationStack: UINavigationController
47 | 48 |
49 |
50 |

UINavigationcontroller with animation show lists of UIViewControllers

51 | 52 |
53 |
54 |
55 |
    56 |
  • 57 |
    58 | 59 | 60 | 61 | decelerationRate 62 | 63 |
    64 |
    65 |
    66 |
    67 |
    68 |
    69 |

    A floating-point value that determines the rate of deceleration after the user lifts their finger.

    70 | 71 |
    72 |
    73 |

    Declaration

    74 |
    75 |

    Swift

    76 |
    @IBInspectable public var decelerationRate: CGFloat = UIScrollViewDecelerationRateNormal
    77 | 78 |
    79 |
    80 |
    81 |
    82 |
  • 83 |
  • 84 |
    85 | 86 | 87 | 88 | bgColor 89 | 90 |
    91 |
    92 |
    93 |
    94 |
    95 |
    96 |

    The color to use for the background of the lists of UIViewcontrollers.

    97 | 98 |
    99 |
    100 |

    Declaration

    101 |
    102 |

    Swift

    103 |
    @IBInspectable public var bgColor: UIColor = .blackColor()
    104 | 105 |
    106 |
    107 |
    108 |
    109 |
  • 110 |
  • 111 |
    112 | 113 | 114 | 115 | bgView 116 | 117 |
    118 |
    119 |
    120 |
    121 |
    122 |
    123 |

    The background UIView of the lists of UIViewcontrollers.

    124 | 125 |
    126 |
    127 |

    Declaration

    128 |
    129 |

    Swift

    130 |
    public var bgView: UIView? = nil
    131 | 132 |
    133 |
    134 |
    135 |
    136 |
  • 137 |
  • 138 |
    139 | 140 | 141 | 142 | stackDelegate 143 | 144 |
    145 |
    146 |
    147 |
    148 |
    149 |
    150 |

    The delegate of the navigation controller object. Use this instead delegate.

    151 | 152 |
    153 |
    154 |

    Declaration

    155 |
    156 |

    Swift

    157 |
    weak public var stackDelegate: UINavigationControllerDelegate?
    158 | 159 |
    160 |
    161 |
    162 |
    163 |
  • 164 |
  • 165 |
    166 | 167 | 168 | 169 | init(coder:) 170 | 171 |
    172 |
    173 |
    174 |
    175 |
    176 |
    177 |

    The initialized navigation controller object or nil if there was a problem initializing the object.

    178 | 179 |
    180 |
    181 |

    Declaration

    182 |
    183 |

    Swift

    184 |
    public required init?(coder aDecoder: NSCoder)
    185 | 186 |
    187 |
    188 |
    189 |

    Parameters

    190 | 191 | 192 | 193 | 198 | 204 | 205 | 206 |
    194 | 195 | aDecoder 196 | 197 | 199 |
    200 |

    aDecoder

    201 | 202 |
    203 |
    207 |
    208 |
    209 |

    Return Value

    210 |

    The initialized navigation controller object or nil if there was a problem initializing the object.

    211 | 212 |
    213 |
    214 |
    215 |
  • 216 |
217 |
218 |
219 |
    220 |
  • 221 |
    222 | 223 | 224 | 225 | showControllers() 226 | 227 |
    228 |
    229 |
    230 |
    231 |
    232 |
    233 |

    Show list of ViewControllers.

    234 | 235 |
    236 |
    237 |

    Declaration

    238 |
    239 |

    Swift

    240 |
    public func showControllers()
    241 | 242 |
    243 |
    244 |
    245 |
    246 |
  • 247 |
248 |
249 |
250 |
251 | 255 |
256 |
257 | 258 | 259 | 260 | -------------------------------------------------------------------------------- /docs/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; } 143 | .nav-group-task a { 144 | color: #888; } 145 | 146 | .main-content { 147 | background-color: #fff; 148 | border: 1px solid #e2e2e2; 149 | margin-left: 246px; 150 | position: absolute; 151 | overflow: hidden; 152 | padding-bottom: 60px; 153 | top: 70px; 154 | width: 734px; } 155 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 156 | margin-bottom: 1em; } 157 | .main-content p { 158 | line-height: 1.8em; } 159 | .main-content section .section:first-child { 160 | margin-top: 0; 161 | padding-top: 0; } 162 | .main-content section .task-group-section .task-group:first-of-type { 163 | padding-top: 10px; } 164 | .main-content section .task-group-section .task-group:first-of-type .section-name { 165 | padding-top: 15px; } 166 | 167 | .section { 168 | padding: 0 25px; } 169 | 170 | .highlight { 171 | background-color: #eee; 172 | padding: 10px 12px; 173 | border: 1px solid #e2e2e2; 174 | border-radius: 4px; 175 | overflow-x: auto; } 176 | 177 | .declaration .highlight { 178 | overflow-x: initial; 179 | padding: 0 40px 40px 0; 180 | margin-bottom: -25px; 181 | background-color: transparent; 182 | border: none; } 183 | 184 | .section-name { 185 | margin: 0; 186 | margin-left: 18px; } 187 | 188 | .task-group-section { 189 | padding-left: 6px; 190 | border-top: 1px solid #e2e2e2; } 191 | 192 | .task-group { 193 | padding-top: 0px; } 194 | 195 | .task-name-container a[name]:before { 196 | content: ""; 197 | display: block; 198 | padding-top: 70px; 199 | margin: -70px 0 0; } 200 | 201 | .item { 202 | padding-top: 8px; 203 | width: 100%; 204 | list-style-type: none; } 205 | .item a[name]:before { 206 | content: ""; 207 | display: block; 208 | padding-top: 70px; 209 | margin: -70px 0 0; } 210 | .item code { 211 | background-color: transparent; 212 | padding: 0; } 213 | .item .token { 214 | padding-left: 3px; 215 | margin-left: 15px; 216 | font-size: 11.9px; } 217 | .item .declaration-note { 218 | font-size: .85em; 219 | color: gray; 220 | font-style: italic; } 221 | 222 | .pointer-container { 223 | border-bottom: 1px solid #e2e2e2; 224 | left: -23px; 225 | padding-bottom: 13px; 226 | position: relative; 227 | width: 110%; } 228 | 229 | .pointer { 230 | background: #f9f9f9; 231 | border-left: 1px solid #e2e2e2; 232 | border-top: 1px solid #e2e2e2; 233 | height: 12px; 234 | left: 21px; 235 | top: -7px; 236 | -webkit-transform: rotate(45deg); 237 | -moz-transform: rotate(45deg); 238 | -o-transform: rotate(45deg); 239 | transform: rotate(45deg); 240 | position: absolute; 241 | width: 12px; } 242 | 243 | .height-container { 244 | display: none; 245 | left: -25px; 246 | padding: 0 25px; 247 | position: relative; 248 | width: 100%; 249 | overflow: hidden; } 250 | .height-container .section { 251 | background: #f9f9f9; 252 | border-bottom: 1px solid #e2e2e2; 253 | left: -25px; 254 | position: relative; 255 | width: 100%; 256 | padding-top: 10px; 257 | padding-bottom: 5px; } 258 | 259 | .aside, .language { 260 | padding: 6px 12px; 261 | margin: 12px 0; 262 | border-left: 5px solid #dddddd; 263 | overflow-y: hidden; } 264 | .aside .aside-title, .language .aside-title { 265 | font-size: 9px; 266 | letter-spacing: 2px; 267 | text-transform: uppercase; 268 | padding-bottom: 0; 269 | margin: 0; 270 | color: #aaa; 271 | -webkit-user-select: none; } 272 | .aside p:last-child, .language p:last-child { 273 | margin-bottom: 0; } 274 | 275 | .language { 276 | border-left: 5px solid #cde9f4; } 277 | .language .aside-title { 278 | color: #4b8afb; } 279 | 280 | .aside-warning { 281 | border-left: 5px solid #ff6666; } 282 | .aside-warning .aside-title { 283 | color: #ff0000; } 284 | 285 | .graybox { 286 | border-collapse: collapse; 287 | width: 100%; } 288 | .graybox p { 289 | margin: 0; 290 | word-break: break-word; 291 | min-width: 50px; } 292 | .graybox td { 293 | border: 1px solid #e2e2e2; 294 | padding: 5px 25px 5px 10px; 295 | vertical-align: middle; } 296 | .graybox tr td:first-of-type { 297 | text-align: right; 298 | padding: 7px; 299 | vertical-align: top; 300 | word-break: normal; 301 | width: 40px; } 302 | 303 | .slightly-smaller { 304 | font-size: 0.9em; } 305 | 306 | #footer { 307 | position: absolute; 308 | bottom: 10px; 309 | margin-left: 25px; } 310 | #footer p { 311 | margin: 0; 312 | color: #aaa; 313 | font-size: 0.8em; } 314 | 315 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 316 | display: none; } 317 | html.dash .main-content { 318 | width: 980px; 319 | margin-left: 0; 320 | border: none; 321 | width: 100%; 322 | top: 0; 323 | padding-bottom: 0; } 324 | html.dash .height-container { 325 | display: block; } 326 | html.dash .item .token { 327 | margin-left: 0; } 328 | html.dash .content-wrapper { 329 | width: auto; } 330 | html.dash #footer { 331 | position: static; } 332 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | com.jazzy.navigationstackdemo 7 | CFBundleName 8 | NavigationStackDemo 9 | DocSetPlatformFamily 10 | jazzy 11 | isDashDocset 12 | 13 | dashIndexFilePath 14 | index.html 15 | isJavaScriptEnabled 16 | 17 | DashDocSetFamily 18 | dashtoc 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

NavigationStackDemo Docs (69% documented)

17 |
18 |
19 |
20 | 25 |
26 |
27 | 39 |
40 |
41 |
42 |

Classes

43 |

The following classes are available globally.

44 | 45 |
46 |
47 |
48 |
    49 |
  • 50 |
    51 | 52 | 53 | 54 | NavigationStack 55 | 56 |
    57 |
    58 |
    59 |
    60 |
    61 |
    62 |

    UINavigationcontroller with animation show lists of UIViewControllers

    63 | 64 | See more 65 |
    66 |
    67 |

    Declaration

    68 |
    69 |

    Swift

    70 |
    public class NavigationStack: UINavigationController
    71 | 72 |
    73 |
    74 |
    75 |
    76 |
  • 77 |
78 |
79 |
80 |
81 | 85 |
86 |
87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/Classes/NavigationStack.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NavigationStack Class Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

NavigationStackDemo Docs (69% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 40 |
41 |
42 |
43 |

NavigationStack

44 |
45 |
46 |
public class NavigationStack: UINavigationController
47 | 48 |
49 |
50 |

UINavigationcontroller with animation show lists of UIViewControllers

51 | 52 |
53 |
54 |
55 |
    56 |
  • 57 |
    58 | 59 | 60 | 61 | decelerationRate 62 | 63 |
    64 |
    65 |
    66 |
    67 |
    68 |
    69 |

    A floating-point value that determines the rate of deceleration after the user lifts their finger.

    70 | 71 |
    72 |
    73 |

    Declaration

    74 |
    75 |

    Swift

    76 |
    @IBInspectable public var decelerationRate: CGFloat = UIScrollViewDecelerationRateNormal
    77 | 78 |
    79 |
    80 |
    81 |
    82 |
  • 83 |
  • 84 |
    85 | 86 | 87 | 88 | bgColor 89 | 90 |
    91 |
    92 |
    93 |
    94 |
    95 |
    96 |

    The color to use for the background of the lists of UIViewcontrollers.

    97 | 98 |
    99 |
    100 |

    Declaration

    101 |
    102 |

    Swift

    103 |
    @IBInspectable public var bgColor: UIColor = .blackColor()
    104 | 105 |
    106 |
    107 |
    108 |
    109 |
  • 110 |
  • 111 |
    112 | 113 | 114 | 115 | bgView 116 | 117 |
    118 |
    119 |
    120 |
    121 |
    122 |
    123 |

    The background UIView of the lists of UIViewcontrollers.

    124 | 125 |
    126 |
    127 |

    Declaration

    128 |
    129 |

    Swift

    130 |
    public var bgView: UIView? = nil
    131 | 132 |
    133 |
    134 |
    135 |
    136 |
  • 137 |
  • 138 |
    139 | 140 | 141 | 142 | stackDelegate 143 | 144 |
    145 |
    146 |
    147 |
    148 |
    149 |
    150 |

    The delegate of the navigation controller object. Use this instead delegate.

    151 | 152 |
    153 |
    154 |

    Declaration

    155 |
    156 |

    Swift

    157 |
    weak public var stackDelegate: UINavigationControllerDelegate?
    158 | 159 |
    160 |
    161 |
    162 |
    163 |
  • 164 |
  • 165 |
    166 | 167 | 168 | 169 | init(coder:) 170 | 171 |
    172 |
    173 |
    174 |
    175 |
    176 |
    177 |

    The initialized navigation controller object or nil if there was a problem initializing the object.

    178 | 179 |
    180 |
    181 |

    Declaration

    182 |
    183 |

    Swift

    184 |
    public required init?(coder aDecoder: NSCoder)
    185 | 186 |
    187 |
    188 |
    189 |

    Parameters

    190 | 191 | 192 | 193 | 198 | 204 | 205 | 206 |
    194 | 195 | aDecoder 196 | 197 | 199 |
    200 |

    aDecoder

    201 | 202 |
    203 |
    207 |
    208 |
    209 |

    Return Value

    210 |

    The initialized navigation controller object or nil if there was a problem initializing the object.

    211 | 212 |
    213 |
    214 |
    215 |
  • 216 |
217 |
218 |
219 |
    220 |
  • 221 |
    222 | 223 | 224 | 225 | showControllers() 226 | 227 |
    228 |
    229 |
    230 |
    231 |
    232 |
    233 |

    Show list of ViewControllers.

    234 | 235 |
    236 |
    237 |

    Declaration

    238 |
    239 |

    Swift

    240 |
    public func showControllers()
    241 | 242 |
    243 |
    244 |
    245 |
    246 |
  • 247 |
248 |
249 |
250 |
251 | 255 |
256 |
257 | 258 | 259 | 260 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; } 143 | .nav-group-task a { 144 | color: #888; } 145 | 146 | .main-content { 147 | background-color: #fff; 148 | border: 1px solid #e2e2e2; 149 | margin-left: 246px; 150 | position: absolute; 151 | overflow: hidden; 152 | padding-bottom: 60px; 153 | top: 70px; 154 | width: 734px; } 155 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 156 | margin-bottom: 1em; } 157 | .main-content p { 158 | line-height: 1.8em; } 159 | .main-content section .section:first-child { 160 | margin-top: 0; 161 | padding-top: 0; } 162 | .main-content section .task-group-section .task-group:first-of-type { 163 | padding-top: 10px; } 164 | .main-content section .task-group-section .task-group:first-of-type .section-name { 165 | padding-top: 15px; } 166 | 167 | .section { 168 | padding: 0 25px; } 169 | 170 | .highlight { 171 | background-color: #eee; 172 | padding: 10px 12px; 173 | border: 1px solid #e2e2e2; 174 | border-radius: 4px; 175 | overflow-x: auto; } 176 | 177 | .declaration .highlight { 178 | overflow-x: initial; 179 | padding: 0 40px 40px 0; 180 | margin-bottom: -25px; 181 | background-color: transparent; 182 | border: none; } 183 | 184 | .section-name { 185 | margin: 0; 186 | margin-left: 18px; } 187 | 188 | .task-group-section { 189 | padding-left: 6px; 190 | border-top: 1px solid #e2e2e2; } 191 | 192 | .task-group { 193 | padding-top: 0px; } 194 | 195 | .task-name-container a[name]:before { 196 | content: ""; 197 | display: block; 198 | padding-top: 70px; 199 | margin: -70px 0 0; } 200 | 201 | .item { 202 | padding-top: 8px; 203 | width: 100%; 204 | list-style-type: none; } 205 | .item a[name]:before { 206 | content: ""; 207 | display: block; 208 | padding-top: 70px; 209 | margin: -70px 0 0; } 210 | .item code { 211 | background-color: transparent; 212 | padding: 0; } 213 | .item .token { 214 | padding-left: 3px; 215 | margin-left: 15px; 216 | font-size: 11.9px; } 217 | .item .declaration-note { 218 | font-size: .85em; 219 | color: gray; 220 | font-style: italic; } 221 | 222 | .pointer-container { 223 | border-bottom: 1px solid #e2e2e2; 224 | left: -23px; 225 | padding-bottom: 13px; 226 | position: relative; 227 | width: 110%; } 228 | 229 | .pointer { 230 | background: #f9f9f9; 231 | border-left: 1px solid #e2e2e2; 232 | border-top: 1px solid #e2e2e2; 233 | height: 12px; 234 | left: 21px; 235 | top: -7px; 236 | -webkit-transform: rotate(45deg); 237 | -moz-transform: rotate(45deg); 238 | -o-transform: rotate(45deg); 239 | transform: rotate(45deg); 240 | position: absolute; 241 | width: 12px; } 242 | 243 | .height-container { 244 | display: none; 245 | left: -25px; 246 | padding: 0 25px; 247 | position: relative; 248 | width: 100%; 249 | overflow: hidden; } 250 | .height-container .section { 251 | background: #f9f9f9; 252 | border-bottom: 1px solid #e2e2e2; 253 | left: -25px; 254 | position: relative; 255 | width: 100%; 256 | padding-top: 10px; 257 | padding-bottom: 5px; } 258 | 259 | .aside, .language { 260 | padding: 6px 12px; 261 | margin: 12px 0; 262 | border-left: 5px solid #dddddd; 263 | overflow-y: hidden; } 264 | .aside .aside-title, .language .aside-title { 265 | font-size: 9px; 266 | letter-spacing: 2px; 267 | text-transform: uppercase; 268 | padding-bottom: 0; 269 | margin: 0; 270 | color: #aaa; 271 | -webkit-user-select: none; } 272 | .aside p:last-child, .language p:last-child { 273 | margin-bottom: 0; } 274 | 275 | .language { 276 | border-left: 5px solid #cde9f4; } 277 | .language .aside-title { 278 | color: #4b8afb; } 279 | 280 | .aside-warning { 281 | border-left: 5px solid #ff6666; } 282 | .aside-warning .aside-title { 283 | color: #ff0000; } 284 | 285 | .graybox { 286 | border-collapse: collapse; 287 | width: 100%; } 288 | .graybox p { 289 | margin: 0; 290 | word-break: break-word; 291 | min-width: 50px; } 292 | .graybox td { 293 | border: 1px solid #e2e2e2; 294 | padding: 5px 25px 5px 10px; 295 | vertical-align: middle; } 296 | .graybox tr td:first-of-type { 297 | text-align: right; 298 | padding: 7px; 299 | vertical-align: top; 300 | word-break: normal; 301 | width: 40px; } 302 | 303 | .slightly-smaller { 304 | font-size: 0.9em; } 305 | 306 | #footer { 307 | position: absolute; 308 | bottom: 10px; 309 | margin-left: 25px; } 310 | #footer p { 311 | margin: 0; 312 | color: #aaa; 313 | font-size: 0.8em; } 314 | 315 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 316 | display: none; } 317 | html.dash .main-content { 318 | width: 980px; 319 | margin-left: 0; 320 | border: none; 321 | width: 100%; 322 | top: 0; 323 | padding-bottom: 0; } 324 | html.dash .height-container { 325 | display: block; } 326 | html.dash .item .token { 327 | margin-left: 0; } 328 | html.dash .content-wrapper { 329 | width: auto; } 330 | html.dash #footer { 331 | position: static; } 332 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NavigationStackDemo Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

NavigationStackDemo Docs (69% documented)

17 |
18 |
19 |
20 | 25 |
26 |
27 | 39 |
40 |
41 |
42 | 43 |

header

44 |

navigation-stack

45 | 46 |

Twitter 47 | CocoaPods 48 | CocoaPods 49 | CocoaPods 50 | Travis 51 | codebeat badge 52 | Carthage compatible

53 | 54 |

shot on dribbble: 55 | Animation

56 | 57 |

The iPhone mockup available here.

58 |

Requirements

59 | 60 |
    61 |
  • iOS 9.0+
  • 62 |
  • Xcode 7.3
  • 63 |
64 |

Installation

65 | 66 |

Just add the Source folder to your project.

67 | 68 |

or use CocoaPods with Podfile: 69 | ruby 70 | pod 'Navigation-stack' 71 |

72 | 73 |

or Carthage users can simply add to their Cartfile: 74 | 75 | github "Ramotion/navigation-stack" 76 |

77 |

Usage

78 | 79 |

1) YourNavigationController inherit from NavigationStack

80 | 81 |

2) add code to root viewViewController

82 |
override func viewDidLoad() {
 83 |     super.viewDidLoad()
 84 |     navigationController!.interactivePopGestureRecognizer?.delegate = self
 85 |   }
 86 | 
87 |
extension YourViewController: UIGestureRecognizerDelegate {
 88 |   func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
 89 | 
 90 |     if navigationController?.viewControllers.count == 2 {
 91 |       return true
 92 |     }
 93 | 
 94 |     if let navigationController = self.navigationController as? NavigationStack {
 95 |       navigationController.showControllers()
 96 |     }
 97 | 
 98 |     return false
 99 |   }
100 | }
101 | 
102 |

Licence

103 | 104 |

Navigation-stack is released under the MIT license. 105 | See LICENSE for details.

106 |

About

107 | 108 |

The project maintained by app development agency Ramotion Inc. 109 | See our other open-source projects or hire us to design, develop, and grow your product.

110 | 111 |

Twitter URL 112 | Twitter Follow

113 | 114 |
115 |
116 | 120 |
121 |
122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | // On doc load, toggle the URL hash discussion if present 12 | $(document).ready(function() { 13 | if (!window.jazzy.docset) { 14 | var linkToHash = $('a[href="' + window.location.hash +'"]'); 15 | linkToHash.trigger("click"); 16 | } 17 | }); 18 | 19 | // On token click, toggle its discussion and animate token.marginLeft 20 | $(".token").click(function(event) { 21 | if (window.jazzy.docset) { 22 | return; 23 | } 24 | var link = $(this); 25 | var animationDuration = 300; 26 | var tokenOffset = "15px"; 27 | var original = link.css('marginLeft') == tokenOffset; 28 | link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); 29 | $content = link.parent().parent().next(); 30 | $content.slideToggle(animationDuration); 31 | 32 | // Keeps the document from jumping to the hash. 33 | var href = $(this).attr('href'); 34 | if (history.pushState) { 35 | history.pushState({}, '', href); 36 | } else { 37 | location.hash = href; 38 | } 39 | event.preventDefault(); 40 | }); 41 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/Documents/undocumented.txt: -------------------------------------------------------------------------------- 1 | NavigationStack.swift 2 | public func navigationController(navigationController: UINavigationController, 3 | willShowViewController viewController: UIViewController, 4 | animated: Bool) 5 | public func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) 6 | public func navigationController(navigationController: UINavigationController, interactionControllerForAnimationController animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? 7 | public func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? 8 | -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/docsets/NavigationStackDemo.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/docsets/NavigationStackDemo.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/docsets/NavigationStackDemo.tgz -------------------------------------------------------------------------------- /docs/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/img/carat.png -------------------------------------------------------------------------------- /docs/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/img/dash.png -------------------------------------------------------------------------------- /docs/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/docs/img/gh.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NavigationStackDemo Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

NavigationStackDemo Docs (69% documented)

17 |
18 |
19 |
20 | 25 |
26 |
27 | 39 |
40 |
41 |
42 | 43 |

header

44 |

navigation-stack

45 | 46 |

Twitter 47 | CocoaPods 48 | CocoaPods 49 | CocoaPods 50 | Travis 51 | codebeat badge 52 | Carthage compatible

53 | 54 |

shot on dribbble: 55 | Animation

56 | 57 |

The iPhone mockup available here.

58 |

Requirements

59 | 60 |
    61 |
  • iOS 9.0+
  • 62 |
  • Xcode 7.3
  • 63 |
64 |

Installation

65 | 66 |

Just add the Source folder to your project.

67 | 68 |

or use CocoaPods with Podfile: 69 | ruby 70 | pod 'Navigation-stack' 71 |

72 | 73 |

or Carthage users can simply add to their Cartfile: 74 | 75 | github "Ramotion/navigation-stack" 76 |

77 |

Usage

78 | 79 |

1) YourNavigationController inherit from NavigationStack

80 | 81 |

2) add code to root viewViewController

82 |
override func viewDidLoad() {
 83 |     super.viewDidLoad()
 84 |     navigationController!.interactivePopGestureRecognizer?.delegate = self
 85 |   }
 86 | 
87 |
extension YourViewController: UIGestureRecognizerDelegate {
 88 |   func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
 89 | 
 90 |     if navigationController?.viewControllers.count == 2 {
 91 |       return true
 92 |     }
 93 | 
 94 |     if let navigationController = self.navigationController as? NavigationStack {
 95 |       navigationController.showControllers()
 96 |     }
 97 | 
 98 |     return false
 99 |   }
100 | }
101 | 
102 |

Licence

103 | 104 |

Navigation-stack is released under the MIT license. 105 | See LICENSE for details.

106 |

About

107 | 108 |

The project maintained by app development agency Ramotion Inc. 109 | See our other open-source projects or hire us to design, develop, and grow your product.

110 | 111 |

Twitter URL 112 | Twitter Follow

113 | 114 |
115 |
116 | 120 |
121 |
122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | // On doc load, toggle the URL hash discussion if present 12 | $(document).ready(function() { 13 | if (!window.jazzy.docset) { 14 | var linkToHash = $('a[href="' + window.location.hash +'"]'); 15 | linkToHash.trigger("click"); 16 | } 17 | }); 18 | 19 | // On token click, toggle its discussion and animate token.marginLeft 20 | $(".token").click(function(event) { 21 | if (window.jazzy.docset) { 22 | return; 23 | } 24 | var link = $(this); 25 | var animationDuration = 300; 26 | var tokenOffset = "15px"; 27 | var original = link.css('marginLeft') == tokenOffset; 28 | link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); 29 | $content = link.parent().parent().next(); 30 | $content.slideToggle(animationDuration); 31 | 32 | // Keeps the document from jumping to the hash. 33 | var href = $(this).attr('href'); 34 | if (history.pushState) { 35 | history.pushState({}, '', href); 36 | } else { 37 | location.hash = href; 38 | } 39 | event.preventDefault(); 40 | }); 41 | -------------------------------------------------------------------------------- /docs/undocumented.txt: -------------------------------------------------------------------------------- 1 | NavigationStack.swift 2 | public func navigationController(navigationController: UINavigationController, 3 | willShowViewController viewController: UIViewController, 4 | animated: Bool) 5 | public func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) 6 | public func navigationController(navigationController: UINavigationController, interactionControllerForAnimationController animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? 7 | public func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? 8 | -------------------------------------------------------------------------------- /header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/header.png -------------------------------------------------------------------------------- /navigation-stack.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ramotion/navigation-stack/9efb3a2eb741a0555d9c6f3a2835abaa4f3623b8/navigation-stack.gif --------------------------------------------------------------------------------