├── .gitignore ├── .swift-version ├── Documentation ├── artwork │ ├── header.png │ ├── modal.gif │ ├── navigation.gif │ └── tabbar.gif ├── custom_interaction.md ├── shared_element.md └── timing.md ├── Examples ├── BuiltInTransitionsCatalog │ ├── .gitignore │ ├── BuiltInTransitionsCatalog.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── BuiltInTransitionsCatalog.xcscheme │ ├── BuiltInTransitionsCatalog.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── BuiltInTransitionsCatalog │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-60.png │ │ │ │ ├── Icon-60@2x.png │ │ │ │ ├── Icon-60@3x.png │ │ │ │ ├── Icon-72.png │ │ │ │ ├── Icon-72@2x.png │ │ │ │ ├── Icon-76.png │ │ │ │ ├── Icon-76@2x.png │ │ │ │ ├── Icon-76@3x.png │ │ │ │ ├── Icon-Small-50.png │ │ │ │ ├── Icon-Small-50@2x.png │ │ │ │ ├── Icon-Small.png │ │ │ │ ├── Icon-Small@2x.png │ │ │ │ ├── Icon-Small@3x.png │ │ │ │ ├── Icon-Spotlight-40.png │ │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ │ ├── Icon-Spotlight-40@3x.png │ │ │ │ ├── Icon-iPadPro@2x.png │ │ │ │ ├── Icon.png │ │ │ │ └── Icon@2x.png │ │ │ └── Contents.json │ │ ├── AwesomeViewController.swift │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Catalog.swift │ │ ├── CatalogMenu.swift │ │ ├── Info.plist │ │ └── TransitionStyle.swift │ ├── Podfile │ └── Podfile.lock ├── ModalTransitionsExample │ ├── .gitignore │ ├── ModalTransitionsExample.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── ModalTransitionsExample.xcscheme │ ├── ModalTransitionsExample.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── ModalTransitionsExample │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-60.png │ │ │ │ ├── Icon-60@2x.png │ │ │ │ ├── Icon-60@3x.png │ │ │ │ ├── Icon-72.png │ │ │ │ ├── Icon-72@2x.png │ │ │ │ ├── Icon-76.png │ │ │ │ ├── Icon-76@2x.png │ │ │ │ ├── Icon-76@3x.png │ │ │ │ ├── Icon-Small-50.png │ │ │ │ ├── Icon-Small-50@2x.png │ │ │ │ ├── Icon-Small.png │ │ │ │ ├── Icon-Small@2x.png │ │ │ │ ├── Icon-Small@3x.png │ │ │ │ ├── Icon-Spotlight-40.png │ │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ │ ├── Icon-Spotlight-40@3x.png │ │ │ │ ├── Icon-iPadPro@2x.png │ │ │ │ ├── Icon.png │ │ │ │ └── Icon@2x.png │ │ │ ├── Contents.json │ │ │ ├── background.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── background.png │ │ │ └── tabbar_icons │ │ │ │ ├── Contents.json │ │ │ │ ├── cicrle_tabbar.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cicrle_tabbar.png │ │ │ │ ├── cicrle_tabbar@2x.png │ │ │ │ └── cicrle_tabbar@3x.png │ │ │ │ ├── cicrle_tabbar_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cicrle_tabbar_selected.png │ │ │ │ ├── cicrle_tabbar_selected@2x.png │ │ │ │ └── cicrle_tabbar_selected@3x.png │ │ │ │ ├── square_tabbar.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── square_tabbar.png │ │ │ │ ├── square_tabbar@2x.png │ │ │ │ └── square_tabbar@3x.png │ │ │ │ ├── square_tabbar_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── square_tabbar_selected.png │ │ │ │ ├── square_tabbar_selected@2x.png │ │ │ │ └── square_tabbar_selected@3x.png │ │ │ │ ├── triangle_tabbar.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── triangle_tabbar.png │ │ │ │ ├── triangle_tabbar@2x.png │ │ │ │ └── triangle_tabbar@3x.png │ │ │ │ └── triangle_tabbar_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── triangle_tabbar_selected.png │ │ │ │ ├── triangle_tabbar_selected@2x.png │ │ │ │ └── triangle_tabbar_selected@3x.png │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── DropTargetViewController.swift │ │ ├── Info.plist │ │ ├── ShapeSourceViewController.swift │ │ ├── ShapeView.swift │ │ ├── ShapesModel.swift │ │ ├── TransitionStyle.swift │ │ └── Transitioning │ │ │ ├── Convenience.swift │ │ │ ├── ShapeInteractionController.swift │ │ │ └── Transitions │ │ │ ├── DropTargetViewAnimation.swift │ │ │ └── ShapeInteractionAnimation.swift │ ├── Podfile │ ├── Podfile.lock │ └── README.md ├── NavigationTransitionsExample │ ├── Podfile │ ├── Podfile.lock │ ├── Pods │ │ ├── Local Podspecs │ │ │ └── Transition.podspec.json │ │ ├── Manifest.lock │ │ ├── Pods.xcodeproj │ │ │ └── project.pbxproj │ │ └── Target Support Files │ │ │ ├── Pods-Transition_Example │ │ │ ├── Info.plist │ │ │ ├── Pods-Transition_Example-acknowledgements.markdown │ │ │ ├── Pods-Transition_Example-acknowledgements.plist │ │ │ ├── Pods-Transition_Example-dummy.m │ │ │ ├── Pods-Transition_Example-frameworks.sh │ │ │ ├── Pods-Transition_Example-resources.sh │ │ │ ├── Pods-Transition_Example-umbrella.h │ │ │ ├── Pods-Transition_Example.debug.xcconfig │ │ │ ├── Pods-Transition_Example.modulemap │ │ │ └── Pods-Transition_Example.release.xcconfig │ │ │ └── Transition │ │ │ ├── Info.plist │ │ │ ├── Transition-dummy.m │ │ │ ├── Transition-prefix.pch │ │ │ ├── Transition-umbrella.h │ │ │ ├── Transition.modulemap │ │ │ └── Transition.xcconfig │ ├── Transition.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Transition-Example.xcscheme │ ├── Transition.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Transition │ │ ├── App │ │ ├── AppDelegate.swift │ │ ├── CollectionView │ │ │ ├── CollectionViewCell.swift │ │ │ ├── CollectionViewController+Transition.swift │ │ │ ├── CollectionViewController.swift │ │ │ └── CollectionViewLayout.swift │ │ ├── Item.swift │ │ ├── Location.swift │ │ └── Router.swift │ │ ├── Base.lproj │ │ └── LaunchScreen.xib │ │ ├── Convenience.swift │ │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-60.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-72.png │ │ │ ├── Icon-72@2x.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── Icon-76@3x.png │ │ │ ├── Icon-Small-50.png │ │ │ ├── Icon-Small-50@2x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── Icon-Spotlight-40.png │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ ├── Icon-Spotlight-40@3x.png │ │ │ ├── Icon-iPadPro@2x.png │ │ │ ├── Icon.png │ │ │ └── Icon@2x.png │ │ ├── Info.plist │ │ ├── Items.plist │ │ ├── Transition │ │ ├── FadeTransition.swift │ │ ├── InteractiveZoomTransition.swift │ │ ├── InteractiveZoomTransitionController.swift │ │ └── ZoomTransitionItem.swift │ │ └── TransitionStyle.swift ├── SimpleExample │ ├── .gitignore │ ├── Podfile │ ├── Podfile.lock │ ├── SimpleExample.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── SimpleExample.xcscheme │ ├── SimpleExample.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── SimpleExample │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-60.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-72.png │ │ │ ├── Icon-72@2x.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── Icon-76@3x.png │ │ │ ├── Icon-Small-50.png │ │ │ ├── Icon-Small-50@2x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── Icon-Spotlight-40.png │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ ├── Icon-Spotlight-40@3x.png │ │ │ ├── Icon-iPadPro@2x.png │ │ │ ├── Icon.png │ │ │ └── Icon@2x.png │ │ ├── Contents.json │ │ └── touchwonders_logo.imageset │ │ │ ├── Contents.json │ │ │ ├── touchwonders_logo.png │ │ │ ├── touchwonders_logo@2x.png │ │ │ └── touchwonders_logo@3x.png │ │ ├── Info.plist │ │ ├── MyNavigationTransitions.swift │ │ ├── SimpleAnimation.swift │ │ └── ViewController.swift └── TabBarTransitionsExample │ ├── .gitignore │ ├── Podfile │ ├── Podfile.lock │ ├── README.md │ ├── TabBarTransitionsExample.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── TabBarTransitionsExample.xcscheme │ ├── TabBarTransitionsExample.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── TabBarTransitionsExample │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-60.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-72.png │ │ ├── Icon-72@2x.png │ │ ├── Icon-76.png │ │ ├── Icon-76@2x.png │ │ ├── Icon-76@3x.png │ │ ├── Icon-Small-50.png │ │ ├── Icon-Small-50@2x.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ ├── Icon-Spotlight-40.png │ │ ├── Icon-Spotlight-40@2x.png │ │ ├── Icon-Spotlight-40@3x.png │ │ ├── Icon-iPadPro@2x.png │ │ ├── Icon.png │ │ └── Icon@2x.png │ ├── Contents.json │ ├── background.imageset │ │ ├── Contents.json │ │ └── background.png │ └── tabbar_icons │ │ ├── Contents.json │ │ ├── cicrle_tabbar.imageset │ │ ├── Contents.json │ │ ├── cicrle_tabbar.png │ │ ├── cicrle_tabbar@2x.png │ │ └── cicrle_tabbar@3x.png │ │ ├── cicrle_tabbar_selected.imageset │ │ ├── Contents.json │ │ ├── cicrle_tabbar_selected.png │ │ ├── cicrle_tabbar_selected@2x.png │ │ └── cicrle_tabbar_selected@3x.png │ │ ├── square_tabbar.imageset │ │ ├── Contents.json │ │ ├── square_tabbar.png │ │ ├── square_tabbar@2x.png │ │ └── square_tabbar@3x.png │ │ ├── square_tabbar_selected.imageset │ │ ├── Contents.json │ │ ├── square_tabbar_selected.png │ │ ├── square_tabbar_selected@2x.png │ │ └── square_tabbar_selected@3x.png │ │ ├── triangle_tabbar.imageset │ │ ├── Contents.json │ │ ├── triangle_tabbar.png │ │ ├── triangle_tabbar@2x.png │ │ └── triangle_tabbar@3x.png │ │ └── triangle_tabbar_selected.imageset │ │ ├── Contents.json │ │ ├── triangle_tabbar_selected.png │ │ ├── triangle_tabbar_selected@2x.png │ │ └── triangle_tabbar_selected@3x.png │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Info.plist │ ├── TransitionStyle.swift │ ├── Transitioning │ ├── Convenience.swift │ ├── TabBarTransitions.swift │ └── Transitions │ │ └── ShapeTransitionAnimation.swift │ └── ViewController.swift ├── LICENSE ├── Package.swift ├── README.md ├── Tests ├── .gitignore ├── Podfile ├── Podfile.lock ├── TestProject.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── TestProject.xcscheme │ │ ├── TransitionTests.xcscheme │ │ └── TransitionUITests.xcscheme ├── TestProject │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── TransitionTests │ ├── Info.plist │ ├── TestObjects │ │ ├── TestInteractionController.swift │ │ ├── TestOperationContext.swift │ │ ├── TestOperationDelegates.swift │ │ ├── TestTransitions.swift │ │ └── TestTransitionsSource.swift │ ├── TransitionControllerTests.swift │ └── TransitionDriverTests.swift └── TransitionUITests │ ├── Info.plist │ └── TestProjectUITests.swift ├── Transition.podspec ├── Transition.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ └── Transition.xcscheme └── Transition ├── Classes ├── .gitkeep ├── AnimationLayer.swift ├── AnimationRange.swift ├── AnimationTimingParameters.swift ├── Convenience │ ├── PanInteractionController.swift │ └── Transitions │ │ ├── DissolveTransitionAnimation.swift │ │ ├── EdgeTransitionAnimation.swift │ │ ├── MoveTransitionAnimation.swift │ │ ├── PushTransitionAnimation.swift │ │ └── RevealTransitionAnimation.swift ├── Helpers │ ├── AnimationRange+Helpers.swift │ ├── DelegateProxy.swift │ ├── TransitionEdges.swift │ ├── UINavigationControllerDelegateProxy.swift │ ├── UITabBarControllerDelegateProxy.swift │ └── UIViewControllerContextTransitioning+Properties.swift ├── InteractiveTransitionOperationDelegate.swift ├── ModalPresentationControllerSource.swift ├── SharedElement.swift ├── SharedElementTransition.swift ├── Transition.swift ├── TransitionAnimation.swift ├── TransitionCompletionCoordinator.swift ├── TransitionController.swift ├── TransitionDriver.swift ├── TransitionInteractionController.swift ├── TransitionOperation.swift ├── TransitionOperationContext.swift ├── TransitionPhaseDelegate.swift └── TransitionsSource.swift ├── Info.plist └── Transition.h /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | # Pods/ 34 | Examples/NavigationController/Pods/Reveal-SDK/RevealServer-6/iOS/RevealServer.framework/Info.plist 35 | Examples/NavigationController/Pods/Reveal-SDK/RevealServer-6/iOS/RevealServer.framework/RevealServer 36 | Examples/NavigationController/Pods/Reveal-SDK/RevealServer-6/iOS/RevealServer.framework/_CodeSignature/CodeResources 37 | Examples/NavigationController/Pods/Reveal-SDK/RevealServer-6/iOS/RevealServer.framework/Headers/RevealServer.h 38 | Examples/NavigationController/Pods/Reveal-SDK/RevealServer-6/iOS/RevealServer.framework/Modules/module.modulemap 39 | Examples/NavigationController/Pods/Reveal-SDK/RevealServer-6/iOS/RevealServer.framework/Scripts/copy_and_codesign_revealserver.sh 40 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 5 2 | -------------------------------------------------------------------------------- /Documentation/artwork/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Documentation/artwork/header.png -------------------------------------------------------------------------------- /Documentation/artwork/modal.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Documentation/artwork/modal.gif -------------------------------------------------------------------------------- /Documentation/artwork/navigation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Documentation/artwork/navigation.gif -------------------------------------------------------------------------------- /Documentation/artwork/tabbar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Documentation/artwork/tabbar.gif -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/.gitignore: -------------------------------------------------------------------------------- 1 | Pods/ 2 | # Xcode 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata/ 13 | project.xcworkspace/ 14 | *.xccheckout 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | *.hmap 19 | *.ipa 20 | 21 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | @UIApplicationMain 28 | class AppDelegate: UIResponder, UIApplicationDelegate { 29 | 30 | var window: UIWindow? 31 | 32 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 33 | if let navigationController = window?.rootViewController as? UINavigationController, let font = UIFont(name: transitionFontName, size: 20.0) { 34 | navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: UIColor.white] 35 | } 36 | return true 37 | } 38 | 39 | } 40 | 41 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-76@3x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/AwesomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | class AwesomeViewController: UIViewController { 28 | 29 | var catalogItem: Catalog = .move 30 | var colorIndex: Int = 0 31 | 32 | @IBOutlet weak var transitionTitle: UILabel! 33 | 34 | override func viewDidLoad() { 35 | super.viewDidLoad() 36 | title = catalogItem.title 37 | transitionTitle.text = title 38 | view.backgroundColor = color(colorIndex) 39 | } 40 | } 41 | 42 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/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 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Catalog.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import Transition 26 | 27 | 28 | enum Catalog: Int { 29 | case dissolve 30 | case move 31 | case push 32 | case reveal 33 | // More to come! 34 | 35 | case numberOfItems 36 | } 37 | 38 | extension Catalog { 39 | var title: String { 40 | return String(describing: self).capitalized 41 | } 42 | 43 | var transitionAnimation: TransitionAnimation { 44 | switch self { 45 | case .dissolve: return DissolveTransitionAnimation() 46 | case .move: return MoveTransitionAnimation(forNavigationTransitionsAtEdge: .right) 47 | case .push: return PushTransitionAnimation(forNavigationTransitionsAtEdge: .right) 48 | case .reveal: return RevealTransitionAnimation(forNavigationTransitionsAtEdge: .left) 49 | default: fatalError("Unsupported transition") 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Catalog 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UIStatusBarHidden 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | UIViewControllerBasedStatusBarAppearance 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/BuiltInTransitionsCatalog/TransitionStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | // MARK: Colors 28 | 29 | let transitionFontName = "ArialRoundedMTBold" 30 | 31 | func color(_ index: Int) -> UIColor { 32 | let colors = [UIColor(red:255/255, green:64/255, blue:159/255, alpha:1), 33 | UIColor(red:51/255, green:255/255, blue:85/255, alpha:1), 34 | UIColor(red:255/255, green:234/255, blue:0/255, alpha:1), 35 | UIColor(red:26/255, green:217/255, blue:255/255, alpha:1)] 36 | return colors[index % colors.count] 37 | } 38 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'BuiltInTransitionsCatalog' do 4 | pod 'Transition', :path => '../../' 5 | end 6 | -------------------------------------------------------------------------------- /Examples/BuiltInTransitionsCatalog/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Transition (1.2.1) 3 | 4 | DEPENDENCIES: 5 | - Transition (from `../../`) 6 | 7 | EXTERNAL SOURCES: 8 | Transition: 9 | :path: "../../" 10 | 11 | SPEC CHECKSUMS: 12 | Transition: 5f88f6d8b18036973976430aaea0857d0c2ef894 13 | 14 | PODFILE CHECKSUM: b59c970b89cb4702c2022cf9dcbc7f1aa68e099a 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/.gitignore: -------------------------------------------------------------------------------- 1 | Pods/ 2 | # Xcode 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata/ 13 | project.xcworkspace/ 14 | *.xccheckout 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | *.hmap 19 | *.ipa 20 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | @UIApplicationMain 29 | class AppDelegate: UIResponder, UIApplicationDelegate { 30 | 31 | var window: UIWindow? 32 | 33 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 34 | // 🚀 35 | return true 36 | } 37 | 38 | 39 | } 40 | 41 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "background.png", 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 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/background.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/background.imageset/background.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "cicrle_tabbar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "cicrle_tabbar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "cicrle_tabbar@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "cicrle_tabbar_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "cicrle_tabbar_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "cicrle_tabbar_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "square_tabbar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "square_tabbar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "square_tabbar@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "square_tabbar_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "square_tabbar_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "square_tabbar_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "triangle_tabbar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "triangle_tabbar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "triangle_tabbar@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "triangle_tabbar_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "triangle_tabbar_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "triangle_tabbar_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@2x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/ModalTransitionsExample/ModalTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@3x.png -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/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 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Modal 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UIStatusBarHidden 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UIViewControllerBasedStatusBarAppearance 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/ShapeView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | import Transition 27 | 28 | 29 | class ShapeView : UIImageView { 30 | 31 | override func awakeFromNib() { 32 | super.awakeFromNib() 33 | setup() 34 | } 35 | 36 | private func setup() { 37 | self.contentMode = .center 38 | self.layer.cornerRadius = bounds.midX 39 | self.layer.shouldRasterize = true 40 | } 41 | 42 | var transitioningShapeView: TransitioningShapeView { 43 | return TransitioningShapeView(for: self) 44 | } 45 | } 46 | 47 | 48 | /// The TransitioningShapeView serves as a transitioning context 49 | /// specific for a single ShapeView. It provides the transitioningView, 50 | /// which is a snapshot of the original ShapeView. 51 | /// The object also contains a number of geometric properties used for 52 | /// computing the correct movement and progression of the transition. 53 | class TransitioningShapeView : NSObject, SharedElement { 54 | 55 | private(set) weak var originalShapeView: ShapeView? 56 | let transitioningView: UIView 57 | 58 | var touchOffset: CGVector = .zero 59 | var initialFrame: CGRect = .zero 60 | var targetFrame: CGRect = .zero 61 | 62 | init(for shapeView: ShapeView) { 63 | originalShapeView = shapeView 64 | transitioningView = shapeView.snapshotView(afterScreenUpdates: true)! 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/ShapesModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import Foundation 26 | 27 | /** 28 | * This is a very simple model that counts shapes. 29 | */ 30 | class ShapesModel { 31 | 32 | static let shared = ShapesModel() 33 | 34 | private var counters = [Shape: Int]() 35 | init() { 36 | Shape.all.forEach { self.counters[$0] = 0 } 37 | } 38 | 39 | func count(for shape: Shape) -> Int { 40 | return counters[shape] ?? 0 41 | } 42 | 43 | func increment(shape: Shape, amount: Int = 1) { 44 | counters[shape] = count(for: shape) + amount 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/TransitionStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | enum Shape: Int { 28 | case circle 29 | case triangle 30 | case square 31 | 32 | static var all: [Shape] { 33 | return [.circle, .triangle, .square] 34 | } 35 | 36 | var image: UIImage? { 37 | switch self { 38 | case .circle: return UIImage(named: "cicrle_tabbar")?.withRenderingMode(.alwaysOriginal) 39 | case .triangle: return UIImage(named: "triangle_tabbar")?.withRenderingMode(.alwaysOriginal) 40 | case .square: return UIImage(named: "square_tabbar")?.withRenderingMode(.alwaysOriginal) 41 | } 42 | } 43 | 44 | var selectedImage: UIImage? { 45 | switch self { 46 | case .circle: return UIImage(named: "cicrle_tabbar_selected")?.withRenderingMode(.alwaysOriginal) 47 | case .triangle: return UIImage(named: "triangle_tabbar_selected")?.withRenderingMode(.alwaysOriginal) 48 | case .square: return UIImage(named: "square_tabbar_selected")?.withRenderingMode(.alwaysOriginal) 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/ModalTransitionsExample/Transitioning/Convenience.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | // Some convenience functions 29 | // MARK: Geometry / math 30 | 31 | func -(lhs: CGPoint, rhs: CGPoint) -> CGVector { 32 | return CGVector(dx: lhs.x - rhs.x, dy: lhs.y - rhs.y) 33 | } 34 | 35 | func -(lhs: CGPoint, rhs: CGVector) -> CGPoint { 36 | return CGPoint(x: lhs.x - rhs.dx, y: lhs.y - rhs.dy) 37 | } 38 | 39 | extension CGPoint { 40 | var vector: CGVector { 41 | return CGVector(dx: x, dy: y) 42 | } 43 | } 44 | 45 | extension CGVector { 46 | var magnitude: CGFloat { 47 | return sqrt(dx*dx + dy*dy) 48 | } 49 | } 50 | 51 | func clip(_ x0: T, _ x1: T, _ v: T) -> T { 52 | return max(x0, min(x1, v)) 53 | } 54 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'ModalTransitionsExample' do 4 | pod 'Transition', :path => '../../' 5 | end 6 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Transition (1.2.1) 3 | 4 | DEPENDENCIES: 5 | - Transition (from `../../`) 6 | 7 | EXTERNAL SOURCES: 8 | Transition: 9 | :path: "../../" 10 | 11 | SPEC CHECKSUMS: 12 | Transition: 5f88f6d8b18036973976430aaea0857d0c2ef894 13 | 14 | PODFILE CHECKSUM: bfe56d75f5bc5e03864425b1530d0fa17f87a5e0 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Examples/ModalTransitionsExample/README.md: -------------------------------------------------------------------------------- 1 | # ModalTransitionsExample 2 | 3 | This is a small example project demonstrating how to implement interactive custom **modal** ViewController transitions. 4 | 5 | Please run ```pod install``` first. 6 | 7 | --- 8 | 9 | The example begins with the `ShapeSourceViewController`, showing four `ShapeView`s that can be dragged. If dragged upwards, the `DropTargetViewController`'s view will appear, showing a drop target (a hole) in which the dragged `ShapeView` can be dropped. Once dropped, the `DropTargetViewController`'s view will move to fullscreen, showing a number of counters, one for each available shape, and the counter associated with the dropped `ShapeView` will be incremented. 10 | 11 | This example showcases the use of an "interactive element", a view that can be moved from one viewController to another (here from the source to the presented). The `ShapeViews` in the `ShapeSourceViewController` can provide an object that serves as interactive element: a `TransitioningShapeView` that conforms to `SharedElement`. Note that it is not the actual `ShapeView` but a snapshot that will be placed in the transitionContext and moved during transition. 12 | 13 | --- 14 | 15 | The two most important objects in this example are: 16 | 17 | * the **`ShapeInteractionController`** (a `TransitionInteractionController`) 18 | * the **`ShapeInteractionAnimation`** (a `SharedElementAnimation`) 19 | 20 | The `ShapeInteractionController` manages the translation of a pan gesture into the appropriate transition operation (present / dismiss / none) and progress of the transition. To be able to determine if the gesture begins at a `ShapeView` (initiating dragging), it needs to hit-test all `ShapeViews`. As such, it is also the logical object to be the `SharedElementProvider`, providing the selected `ShapeView`'s `TransitioningShapeView` that will be used during transition. 21 | 22 | The `ShapeInteractionAnimation` describes the movement of that `TransitioningShapeView` (passed to it via its `sharedElement` property) during animation and interaction phases. 23 | 24 | To be able to move a `ShapeView`s snapshot between its initial and target position (taking into account the initial touch offset of the gesture relative to the `ShapeView`'s center), the `ShapeInteractionController` sets the appropriate values on the `TransitioningShapeView`. 25 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'Transition_Example' do 4 | pod 'Transition', :path => '../../' 5 | end 6 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Transition (1.2.1) 3 | 4 | DEPENDENCIES: 5 | - Transition (from `../../`) 6 | 7 | EXTERNAL SOURCES: 8 | Transition: 9 | :path: "../../" 10 | 11 | SPEC CHECKSUMS: 12 | Transition: 5f88f6d8b18036973976430aaea0857d0c2ef894 13 | 14 | PODFILE CHECKSUM: c86542053e17e87eda5dccfd5d5a1fff31276cd2 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Local Podspecs/Transition.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Transition", 3 | "version": "1.2.1", 4 | "summary": "Easy interactive interruptible custom ViewController transitions.", 5 | "description": "Transition makes building interactive interruptible custom view controller transitions easy! You just define the animation and interaction, Transition ties it all together.", 6 | "homepage": "https://github.com/Touchwonders/Transition", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Toine Heuvelmans": "toine@touchwonders.com" 13 | }, 14 | "social_media_url": "https://twitter.com/touchwonders", 15 | "source": { 16 | "git": "https://github.com/Touchwonders/Transition.git", 17 | "tag": "1.2.1" 18 | }, 19 | "platforms": { 20 | "ios": "10.0" 21 | }, 22 | "swift_version": "4.2", 23 | "source_files": "Transition/Classes/**/*" 24 | } 25 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Transition (1.2.1) 3 | 4 | DEPENDENCIES: 5 | - Transition (from `../../`) 6 | 7 | EXTERNAL SOURCES: 8 | Transition: 9 | :path: "../../" 10 | 11 | SPEC CHECKSUMS: 12 | Transition: 5f88f6d8b18036973976430aaea0857d0c2ef894 13 | 14 | PODFILE CHECKSUM: c86542053e17e87eda5dccfd5d5a1fff31276cd2 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/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.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/Pods-Transition_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## Transition 5 | 6 | MIT License 7 | 8 | Copyright (c) 2017 Touchwonders B.V. 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/Pods-Transition_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2017 Touchwonders B.V. 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | Transition 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/Pods-Transition_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Transition_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Transition_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/Pods-Transition_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_Transition_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_Transition_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/Pods-Transition_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Transition" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Transition/Transition.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "Transition" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/Pods-Transition_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Transition_Example { 2 | umbrella header "Pods-Transition_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Pods-Transition_Example/Pods-Transition_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Transition" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Transition/Transition.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "Transition" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Transition/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.2.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Transition/Transition-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Transition : NSObject 3 | @end 4 | @implementation PodsDummy_Transition 5 | @end 6 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Transition/Transition-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Transition/Transition-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double TransitionVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char TransitionVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Transition/Transition.modulemap: -------------------------------------------------------------------------------- 1 | framework module Transition { 2 | umbrella header "Transition-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Pods/Target Support Files/Transition/Transition.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Transition 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/App/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | let app = UIApplication.shared.delegate as? AppDelegate 29 | 30 | @UIApplicationMain 31 | class AppDelegate: UIResponder, UIApplicationDelegate { 32 | 33 | var window: UIWindow? 34 | var router: Router! 35 | 36 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { 37 | router = Router(start: .collection(nil)) 38 | 39 | window = UIWindow(frame: UIScreen.main.bounds) 40 | window?.rootViewController = router.navigationController 41 | window?.makeKeyAndVisible() 42 | 43 | return true 44 | } 45 | } 46 | 47 | 48 | class TestWindow : UIWindow { 49 | 50 | override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { 51 | return super.point(inside: point, with: event) 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/App/CollectionView/CollectionViewController+Transition.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | import UIKit 25 | import Transition 26 | 27 | extension CollectionViewController: TransitionPhaseDelegate { 28 | 29 | func willTransition(from fromViewController: UIViewController, to toViewController: UIViewController, with sharedElement: SharedElement?) { 30 | collectionView.panGestureRecognizer.isEnabled = false 31 | } 32 | 33 | func didTransition(from fromViewController: UIViewController, to toViewController: UIViewController, with sharedElement: SharedElement?) { 34 | collectionView.panGestureRecognizer.isEnabled = true 35 | } 36 | 37 | func cancelledTransition(from fromViewController: UIViewController, to toViewController: UIViewController, with sharedElement: SharedElement?) { 38 | collectionView.panGestureRecognizer.isEnabled = true 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/App/Location.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | enum Location: Equatable { 29 | case collection(Item?) 30 | 31 | var controller: UIViewController { 32 | switch self { 33 | case .collection(let item): return CollectionViewController(with: item) 34 | } 35 | } 36 | 37 | static func == (lhs: Location, rhs: Location) -> Bool { 38 | switch (lhs, rhs) { 39 | case (.collection(let leftItem), .collection(let rightItem)): 40 | guard let leftItem = leftItem, let rightItem = rightItem else { return false } 41 | return leftItem == rightItem 42 | } 43 | } 44 | } 45 | 46 | extension Location { 47 | 48 | func title() -> String { 49 | switch self { 50 | case .collection: return "collection" 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/App/Router.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | import Transition 27 | 28 | struct Router { 29 | 30 | let navigationController: UINavigationController 31 | let transitionController: InteractiveZoomTransitionController 32 | var current: Location 33 | 34 | init(start location: Location) { 35 | current = location 36 | 37 | navigationController = UINavigationController() 38 | navigationController.viewControllers = [current.controller] 39 | navigationController.view.layer.cornerRadius = 6 40 | navigationController.view.clipsToBounds = true 41 | 42 | transitionController = InteractiveZoomTransitionController(with: navigationController) 43 | } 44 | 45 | mutating func go(to location: Location) { 46 | current = location 47 | navigationController.pushViewController(location.controller, animated: true) 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Convenience.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | extension UIView { 29 | 30 | func snapshot() -> UIImageView { 31 | return UIImageView(image: asImage()) 32 | } 33 | 34 | func asImage() -> UIImage { 35 | let renderer = UIGraphicsImageRenderer(bounds: bounds) 36 | return renderer.image { rendererContext in 37 | layer.render(in: rendererContext.cgContext) 38 | } 39 | } 40 | } 41 | 42 | extension CGPoint { 43 | var vector: CGVector { 44 | return CGVector(dx: x, dy: y) 45 | } 46 | } 47 | 48 | extension CGVector { 49 | var magnitude: CGFloat { 50 | return sqrt(dx*dx + dy*dy) 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-76@3x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/NavigationTransitionsExample/Transition/Images.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/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 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | 35 | CFBundleDisplayName 36 | Navigation 37 | 38 | 39 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Items.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Title 7 | Transition 8 | Photo 9 | 1 10 | 11 | 12 | Title 13 | Transition 14 | Photo 15 | 2 16 | 17 | 18 | Title 19 | Transition 20 | Photo 21 | 3 22 | 23 | 24 | Title 25 | Transition 26 | Photo 27 | 4 28 | 29 | 30 | Title 31 | Transition 32 | Photo 33 | 5 34 | 35 | 36 | Title 37 | Transition 38 | Photo 39 | 6 40 | 41 | 42 | Title 43 | Transition 44 | Photo 45 | 7 46 | 47 | 48 | Title 49 | Transition 50 | Photo 51 | 8 52 | 53 | 54 | Title 55 | Transition 56 | Photo 57 | 9 58 | 59 | 60 | Title 61 | Transition 62 | Photo 63 | 10 64 | 65 | 66 | Title 67 | Transition 68 | Photo 69 | 11 70 | 71 | 72 | Title 73 | Transition 74 | Photo 75 | 12 76 | 77 | 78 | Title 79 | Transition 80 | Photo 81 | 13 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/Transition/ZoomTransitionItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | import UIKit 25 | import Transition 26 | 27 | class ZoomTransitionItem: NSObject, SharedElement { 28 | var initialFrame: CGRect 29 | var targetFrame: CGRect 30 | 31 | /// SharedElement: 32 | var transitioningView: UIView 33 | 34 | var image: UIImage? { 35 | get { 36 | return imageView?.image 37 | } set { 38 | imageView?.image = newValue 39 | } 40 | } 41 | 42 | weak var imageView: UIImageView? 43 | 44 | var touchOffset: CGVector = .zero 45 | 46 | init(initialFrame: CGRect, targetFrame: CGRect, imageView: UIImageView) { 47 | self.initialFrame = initialFrame 48 | self.targetFrame = targetFrame 49 | self.imageView = imageView 50 | 51 | self.transitioningView = imageView.snapshot() 52 | super.init() 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Examples/NavigationTransitionsExample/Transition/TransitionStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | // MARK: Colors 28 | 29 | func color(_ index: Int) -> UIColor { 30 | let colors = [UIColor(red: 255.0 / 255.0, green: 64.0 / 255.0, blue: 159.0 / 255.0, alpha: 1.0), 31 | UIColor(red: 51.0 / 255.0, green: 255.0 / 255.0, blue: 85.0 / 255.0, alpha: 1.0), 32 | UIColor(red: 255.0 / 255.0, green: 234.0 / 255.0, blue: 0.0 / 255.0, alpha: 1.0), 33 | UIColor(red: 26.0 / 255.0, green: 217.0 / 255.0, blue: 255.0 / 255.0, alpha: 1.0)] 34 | return colors[index % colors.count] 35 | } 36 | -------------------------------------------------------------------------------- /Examples/SimpleExample/.gitignore: -------------------------------------------------------------------------------- 1 | Pods/ 2 | # Xcode 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata/ 13 | project.xcworkspace/ 14 | *.xccheckout 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | *.hmap 19 | *.ipa 20 | -------------------------------------------------------------------------------- /Examples/SimpleExample/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'SimpleExample' do 4 | pod 'Transition', :path => '../../' 5 | end 6 | -------------------------------------------------------------------------------- /Examples/SimpleExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Transition (1.2.1) 3 | 4 | DEPENDENCIES: 5 | - Transition (from `../../`) 6 | 7 | EXTERNAL SOURCES: 8 | Transition: 9 | :path: "../../" 10 | 11 | SPEC CHECKSUMS: 12 | Transition: 5f88f6d8b18036973976430aaea0857d0c2ef894 13 | 14 | PODFILE CHECKSUM: 6a2f5e0f7c4cfb94c9f430606d3df4b633f0804b 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | /** 25 | * The example implemented here follows the steps explained in the README. 26 | */ 27 | 28 | import UIKit 29 | 30 | // • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • // 31 | 32 | @UIApplicationMain 33 | class AppDelegate: UIResponder, UIApplicationDelegate { 34 | 35 | var window: UIWindow? 36 | var myTransitions: MyNavigationTransitions? 37 | var navigationController: UINavigationController? { 38 | return window?.rootViewController as? UINavigationController 39 | } 40 | 41 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { 42 | if let navigationController = navigationController { 43 | navigationController.interactivePopGestureRecognizer?.isEnabled = false 44 | myTransitions = MyNavigationTransitions(navigationController: navigationController) 45 | 46 | if let font = UIFont(name: "ArialRoundedMTBold", size: 20.0) { 47 | navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: UIColor.white] 48 | } 49 | } 50 | 51 | return true 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/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 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-76@3x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/touchwonders_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "touchwonders_logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "touchwonders_logo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "touchwonders_logo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/touchwonders_logo.imageset/touchwonders_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/touchwonders_logo.imageset/touchwonders_logo.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/touchwonders_logo.imageset/touchwonders_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/touchwonders_logo.imageset/touchwonders_logo@2x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Images.xcassets/touchwonders_logo.imageset/touchwonders_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/SimpleExample/SimpleExample/Images.xcassets/touchwonders_logo.imageset/touchwonders_logo@3x.png -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Simple 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UIStatusBarHidden 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | UIViewControllerBasedStatusBarAppearance 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /Examples/SimpleExample/SimpleExample/MyNavigationTransitions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import Transition 26 | 27 | 28 | /** 29 | * A wrapper that instantiates our transition-related objects: the controller and its transitionsSource 30 | */ 31 | class MyNavigationTransitions { 32 | let transitionController: TransitionController 33 | let transitionsSource = MyNavigationTransitionSource() 34 | 35 | init(navigationController: UINavigationController) { 36 | transitionController = TransitionController(forTransitionsIn: navigationController, transitionsSource: transitionsSource) 37 | } 38 | } 39 | 40 | // • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • // 41 | 42 | class MyNavigationTransitionSource : TransitionsSource { 43 | func transitionFor(operationContext: TransitionOperationContext, interactionController: TransitionInteractionController?) -> Transition { 44 | return Transition(duration: 0.5, animation: SimpleAnimation()) 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/.gitignore: -------------------------------------------------------------------------------- 1 | Pods/ 2 | # Xcode 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata/ 13 | project.xcworkspace/ 14 | *.xccheckout 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | *.hmap 19 | *.ipa 20 | 21 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'TabBarTransitionsExample' do 4 | pod 'Transition', :path => '../../' 5 | end 6 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Transition (1.2.1) 3 | 4 | DEPENDENCIES: 5 | - Transition (from `../../`) 6 | 7 | EXTERNAL SOURCES: 8 | Transition: 9 | :path: "../../" 10 | 11 | SPEC CHECKSUMS: 12 | Transition: 5f88f6d8b18036973976430aaea0857d0c2ef894 13 | 14 | PODFILE CHECKSUM: 0817a696fe5756214e552d1b62edf30e9237d4d5 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/README.md: -------------------------------------------------------------------------------- 1 | # TabBarTransitionsExample 2 | 3 | This is a small example project demonstrating how to implement interactive custom ViewController transitions for a **`UITabBarController`**. 4 | 5 | Please run ```pod install``` first. 6 | 7 | --- 8 | 9 | The example populates a `UITabBarController` with four instances of `ViewController`, each getting a different shape assigned so that you can visually differentiate the views. 10 | 11 | Upon launch, a convenience object `TabBarTransitions` is created that takes care of instantiating the `TransitionController` for the `UITabBarController`. It uses `TabBarInteraction` as the `TransitionInteractionController`, providing a pan gesture to move between tabs. 12 | 13 | All transitions are defined as `ShapeTransitionAnimation`s, which move in the next view from the side (which side depends on the relative index), adding a blur view during transition. 14 | 15 | There is no interactive "element" – a view that is interactively moved between the from- and toView during transition. 16 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | import UIKit 25 | 26 | @UIApplicationMain 27 | class AppDelegate: UIResponder, UIApplicationDelegate { 28 | 29 | var window: UIWindow? 30 | var transitionController: TabBarTransitions! 31 | 32 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { 33 | let tabBarController = UITabBarController() 34 | tabBarController.tabBar.backgroundImage = UIImage(named: "background") 35 | tabBarController.viewControllers = [ 36 | ViewController(with: .circle), 37 | ViewController(with: .triangle), 38 | ViewController(with: .square) 39 | ] 40 | 41 | transitionController = TabBarTransitions(in: tabBarController) 42 | 43 | window = UIWindow(frame: UIScreen.main.bounds) 44 | window?.rootViewController = tabBarController 45 | window?.makeKeyAndVisible() 46 | 47 | for item in tabBarController.tabBar.items! { 48 | item.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0) 49 | } 50 | 51 | return true 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-76@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "background.png", 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 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/background.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/background.imageset/background.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "cicrle_tabbar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "cicrle_tabbar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "cicrle_tabbar@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar.imageset/cicrle_tabbar@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "cicrle_tabbar_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "cicrle_tabbar_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "cicrle_tabbar_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/cicrle_tabbar_selected.imageset/cicrle_tabbar_selected@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "square_tabbar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "square_tabbar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "square_tabbar@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar.imageset/square_tabbar@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "square_tabbar_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "square_tabbar_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "square_tabbar_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/square_tabbar_selected.imageset/square_tabbar_selected@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "triangle_tabbar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "triangle_tabbar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "triangle_tabbar@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar.imageset/triangle_tabbar@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "triangle_tabbar_selected.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "triangle_tabbar_selected@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "triangle_tabbar_selected@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@2x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Examples/TabBarTransitionsExample/TabBarTransitionsExample/Assets.xcassets/tabbar_icons/triangle_tabbar_selected.imageset/triangle_tabbar_selected@3x.png -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/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 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | TabBar 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIStatusBarHidden 32 | 33 | UIStatusBarTintParameters 34 | 35 | UINavigationBar 36 | 37 | Style 38 | UIBarStyleDefault 39 | Translucent 40 | 41 | 42 | 43 | UISupportedInterfaceOrientations 44 | 45 | UIInterfaceOrientationPortrait 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | UISupportedInterfaceOrientations~ipad 50 | 51 | UIInterfaceOrientationPortrait 52 | UIInterfaceOrientationPortraitUpsideDown 53 | UIInterfaceOrientationLandscapeLeft 54 | UIInterfaceOrientationLandscapeRight 55 | 56 | UIViewControllerBasedStatusBarAppearance 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/TransitionStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | import UIKit 25 | 26 | enum Shape: Int { 27 | case circle 28 | case triangle 29 | case square 30 | 31 | static var all: [Shape] { 32 | return [.circle, .triangle, .square] 33 | } 34 | 35 | var image: UIImage? { 36 | switch self { 37 | case .circle: return UIImage(named: "cicrle_tabbar")?.withRenderingMode(.alwaysOriginal) 38 | case .triangle: return UIImage(named: "triangle_tabbar")?.withRenderingMode(.alwaysOriginal) 39 | case .square: return UIImage(named: "square_tabbar")?.withRenderingMode(.alwaysOriginal) 40 | } 41 | } 42 | 43 | var selectedImage: UIImage? { 44 | switch self { 45 | case .circle: return UIImage(named: "cicrle_tabbar_selected")?.withRenderingMode(.alwaysOriginal) 46 | case .triangle: return UIImage(named: "triangle_tabbar_selected")?.withRenderingMode(.alwaysOriginal) 47 | case .square: return UIImage(named: "square_tabbar_selected")?.withRenderingMode(.alwaysOriginal) 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/Transitioning/Convenience.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | import Transition 27 | 28 | // MARK: Geometry / math 29 | 30 | extension CGPoint { 31 | var vector: CGVector { 32 | return CGVector(dx: x, dy: y) 33 | } 34 | } 35 | 36 | extension CGVector { 37 | var magnitude: CGFloat { 38 | return sqrt(dx*dx + dy*dy) 39 | } 40 | } 41 | 42 | // MARK: TabBar operation 43 | 44 | extension TransitionOperation { 45 | 46 | var isIncreasingIndex: Bool { 47 | if case .tabBar(let operation) = self { 48 | return operation == .increaseIndex 49 | } 50 | return false 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /Examples/TabBarTransitionsExample/TabBarTransitionsExample/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | import UIKit 25 | 26 | class ViewController: UIViewController { 27 | 28 | convenience init(with shape: Shape) { 29 | self.init() 30 | self.tabBarItem = UITabBarItem(title: nil, image: shape.image, selectedImage: shape.selectedImage) 31 | } 32 | 33 | override func viewDidLoad() { 34 | super.viewDidLoad() 35 | view.backgroundColor = UIColor(white: 0.9, alpha: 1) 36 | 37 | let label = UILabel() 38 | label.translatesAutoresizingMaskIntoConstraints = false 39 | label.text = "Swipe between view controllers or tab one of the bar items." 40 | label.textColor = UIColor(white: 0.2, alpha: 1) 41 | label.textAlignment = .center 42 | label.numberOfLines = 0 43 | view.addSubview(label) 44 | 45 | NSLayoutConstraint.activate([ 46 | label.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 30), 47 | label.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -30), 48 | label.centerYAnchor.constraint(equalTo: view.centerYAnchor) 49 | ]) 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Touchwonders B.V. 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 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.3 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "Transition", 8 | products: [ 9 | .library( 10 | name: "Transition", 11 | targets: ["Transition"]), 12 | ], 13 | dependencies: [], 14 | targets: [ 15 | .target( 16 | name: "Transition", 17 | path: "Transition/Classes") 18 | ] 19 | ) 20 | -------------------------------------------------------------------------------- /Tests/.gitignore: -------------------------------------------------------------------------------- 1 | Pods/ 2 | # Xcode 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata/ 13 | project.xcworkspace/ 14 | *.xccheckout 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | *.hmap 19 | *.ipa 20 | -------------------------------------------------------------------------------- /Tests/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target "TestProject" do 4 | pod 'Transition', :path => '../' 5 | 6 | abstract_target 'Tests' do 7 | target "TransitionTests" 8 | target "TransitionUITests" 9 | 10 | # pod 'Quick' 11 | # pod 'Nimble' 12 | end 13 | end -------------------------------------------------------------------------------- /Tests/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Transition (0.0.1) 3 | 4 | DEPENDENCIES: 5 | - Transition (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | Transition: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | Transition: f8fff38165cd85f17fde55081efd72119670da74 13 | 14 | PODFILE CHECKSUM: 2ec41f4cd9576ef7fa114045bd7c81ff4fac81ff 15 | 16 | COCOAPODS: 1.2.0 17 | -------------------------------------------------------------------------------- /Tests/TestProject.xcodeproj/xcshareddata/xcschemes/TransitionTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 14 | 15 | 17 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 39 | 40 | 41 | 42 | 48 | 49 | 51 | 52 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Tests/TestProject.xcodeproj/xcshareddata/xcschemes/TransitionUITests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 14 | 15 | 17 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 39 | 40 | 41 | 42 | 48 | 49 | 51 | 52 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Tests/TestProject/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // TestProject 4 | // 5 | // Created by Toine Heuvelmans on 14/02/2017. 6 | // Copyright © 2017 Touchwonders. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Tests/TestProject/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Tests/TestProject/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 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Tests/TestProject/Base.lproj/Main.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 | 26 | 27 | -------------------------------------------------------------------------------- /Tests/TestProject/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 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Tests/TestProject/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // TestProject 4 | // 5 | // Created by Toine Heuvelmans on 14/02/2017. 6 | // Copyright © 2017 Touchwonders. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view, typically from a nib. 16 | } 17 | 18 | override func didReceiveMemoryWarning() { 19 | super.didReceiveMemoryWarning() 20 | // Dispose of any resources that can be recreated. 21 | } 22 | 23 | 24 | } 25 | 26 | -------------------------------------------------------------------------------- /Tests/TransitionTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tests/TransitionTests/TestObjects/TestOperationDelegates.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | import TransitionPlus 27 | 28 | 29 | class NavigationOperationDelegate : InteractiveNavigationTransitionOperationDelegate { 30 | 31 | let perform: ((UINavigationControllerOperation, UINavigationController, UIGestureRecognizer) -> ())? 32 | 33 | init(perform: ((UINavigationControllerOperation, UINavigationController, UIGestureRecognizer) -> ())?) { 34 | self.perform = perform 35 | } 36 | 37 | func performOperation(operation: UINavigationControllerOperation, forInteractiveTransitionIn controller: UINavigationController, gestureRecognizer: UIGestureRecognizer) { 38 | perform?(operation, controller, gestureRecognizer) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Tests/TransitionTests/TestObjects/TestTransitions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import Foundation 26 | import TransitionPlus 27 | 28 | 29 | public extension Transition { 30 | static var simple: Transition { 31 | return Transition(duration: 1.0, animation: SimpleTransitionAnimation()) 32 | } 33 | } 34 | 35 | 36 | class SimpleTransitionAnimation : TransitionAnimation { 37 | 38 | func setup(in operationContext: TransitionOperationContext) {} 39 | 40 | var layers: [AnimationLayer] { 41 | return [AnimationLayer(timingParameters: UICubicTimingParameters(animationCurve: .easeOut), animation: {_ in return })] 42 | } 43 | 44 | func completion(position: UIViewAnimatingPosition) {} 45 | } 46 | -------------------------------------------------------------------------------- /Tests/TransitionTests/TestObjects/TestTransitionsSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import Foundation 26 | import TransitionPlus 27 | 28 | 29 | class TestTransitionsSource : TransitionsSource { 30 | 31 | let transition: Transition 32 | 33 | init(transition: Transition) { 34 | self.transition = transition 35 | } 36 | 37 | func transitionFor(operationContext: TransitionOperationContext, interactionController: TransitionInteractionController?) -> Transition { 38 | return transition 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Tests/TransitionTests/TransitionDriverTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import XCTest 26 | @testable import TransitionPlus 27 | @testable import TestProject 28 | 29 | 30 | class TransitionDriverTests: XCTestCase { 31 | 32 | func testDuration() { 33 | let transition = Transition.simple 34 | let transitionDriver = TransitionDriver(transition: transition, operationContext: TransitionOperationContext.testContext(forOperation: .navigation(.push)), interactionController: nil) 35 | 36 | XCTAssertEqual(transitionDriver.totalDuration, transition.duration) 37 | XCTAssertEqual(transitionDriver.duration(for: .full), transition.duration) 38 | XCTAssertEqual(transitionDriver.delay(for: .full), 0) 39 | XCTAssertEqual(transitionDriver.delay(for: AnimationRange(start: 0.5, end: 1.0)), 0.5 * transition.duration) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Tests/TransitionUITests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tests/TransitionUITests/TestProjectUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestProjectUITests.swift 3 | // TestProjectUITests 4 | // 5 | // Created by Toine Heuvelmans on 14/02/2017. 6 | // Copyright © 2017 Touchwonders. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import TransitionPlus 11 | @testable import TestProject 12 | 13 | class TestProjectUITests: XCTestCase { 14 | 15 | override func setUp() { 16 | super.setUp() 17 | 18 | // Put setup code here. This method is called before the invocation of each test method in the class. 19 | 20 | // In UI tests it is usually best to stop immediately when a failure occurs. 21 | continueAfterFailure = false 22 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 23 | XCUIApplication().launch() 24 | 25 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 26 | } 27 | 28 | override func tearDown() { 29 | // Put teardown code here. This method is called after the invocation of each test method in the class. 30 | super.tearDown() 31 | } 32 | 33 | func testExample() { 34 | // Use recording to get started writing UI tests. 35 | // Use XCTAssert and related functions to verify your tests produce the correct results. 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /Transition.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Transition' 3 | s.version = '1.3.0' 4 | s.summary = 'Easy interactive interruptible custom ViewController transitions.' 5 | 6 | s.description = <<-DESC 7 | Transition makes building interactive interruptible custom view controller transitions easy! You just define the animation and interaction, Transition ties it all together. 8 | DESC 9 | 10 | s.homepage = 'https://github.com/Touchwonders/Transition' 11 | s.license = { :type => 'MIT', :file => 'LICENSE' } 12 | s.authors = { "Toine Heuvelmans" => "toine@touchwonders.com" } 13 | s.social_media_url = "https://twitter.com/touchwonders" 14 | s.source = { :git => 'https://github.com/Touchwonders/Transition.git', :tag => s.version.to_s } 15 | 16 | s.ios.deployment_target = '10.0' 17 | s.platform = :ios, '10.0' 18 | s.swift_version = '5' 19 | 20 | s.source_files = 'Transition/Classes/**/*' 21 | end 22 | -------------------------------------------------------------------------------- /Transition.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Transition.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Transition/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Touchwonders/Transition/4d40e16a6d85b74311a9975be9f77bc1f6c6e001/Transition/Classes/.gitkeep -------------------------------------------------------------------------------- /Transition/Classes/AnimationRange.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | public typealias AnimationFunction = () -> Void 29 | public typealias AnimationFraction = TimeInterval 30 | 31 | public struct AnimationRange { 32 | public let start: AnimationFraction // A value between 0 and 1 that describes the start point of the animation relative to the time frame of the transition 33 | public let end: AnimationFraction // A value between 0 and 1 that describes the end point of the animation relative to the time frame of the transition 34 | 35 | public init(start: AnimationFraction, end: AnimationFraction) { 36 | assert(start >= 0 && start < end, "Start of range should be greater than 0 and less than end of range.") 37 | assert(end > start && end <= 1, "End of range should be greater than start of range and less than 1.") 38 | assert(start != end, "Range start and end cannot be equal.") 39 | 40 | self.start = start 41 | self.end = end 42 | } 43 | 44 | public static var full: AnimationRange { 45 | return AnimationRange(start: 0.0, end: 1.0) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Transition/Classes/Convenience/Transitions/DissolveTransitionAnimation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | open class DissolveTransitionAnimation : TransitionAnimation { 26 | 27 | public init() {} 28 | 29 | open var animationCurve: UIView.AnimationCurve = .easeInOut 30 | 31 | private weak var topView: UIView? 32 | private var targetAlpha: CGFloat = 0.0 33 | 34 | private var isDismissing: Bool = false 35 | 36 | open func setup(in operationContext: TransitionOperationContext) { 37 | let context = operationContext.context 38 | 39 | guard let topView = context.defaultViewSetup(for: operationContext.operation) else { return } 40 | 41 | self.topView = topView 42 | 43 | isDismissing = operationContext.operation.isDismissing 44 | let initialAlpha: CGFloat = isDismissing ? 1.0 : 0.0 45 | self.targetAlpha = 1.0 - initialAlpha 46 | 47 | self.topView?.alpha = initialAlpha 48 | } 49 | 50 | open var layers: [AnimationLayer] { 51 | return [AnimationLayer(timingParameters: AnimationTimingParameters(animationCurve: animationCurve), animation: animate)] 52 | } 53 | 54 | open func animate() { 55 | topView?.alpha = targetAlpha 56 | } 57 | 58 | open func completion(position: UIViewAnimatingPosition) { 59 | if position != .end && !isDismissing { 60 | topView?.removeFromSuperview() 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /Transition/Classes/Helpers/DelegateProxy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | // Discussion: as an initial solution for sending delegate messages to multiple 26 | // delegates, this delegate proxy simply implements all messages and forwards them. 27 | // Given the context in which this is used, there only are two delegates; a primary 28 | // (the original delegate) and a secondary (TransitionController). 29 | // The primary delegate always takes precedence over the secondary. 30 | // A more dynamic and future-proof solution might be one such as is found in RxSwift: 31 | // https://github.com/ReactiveX/RxSwift/blob/master/RxCocoa/Common/DelegateProxy.swift 32 | // Maybe something for a future update. 33 | 34 | 35 | import Foundation 36 | 37 | 38 | public class DelegateProxy : NSObject { 39 | private(set) internal weak var primaryDelegate: DelegateType? 40 | private(set) internal weak var secondaryDelegate: DelegateType? 41 | 42 | public init(primary: DelegateType, secondary: DelegateType) { 43 | primaryDelegate = primary 44 | secondaryDelegate = secondary 45 | super.init() 46 | } 47 | 48 | internal var delegates: [DelegateType] { 49 | return [primaryDelegate, secondaryDelegate].compactMap({$0}) 50 | } 51 | 52 | internal func firstDelegateRespondingTo(_ selector: Selector) -> DelegateType? { 53 | return delegates.first { $0.responds(to: selector) } 54 | } 55 | 56 | override public func responds(to aSelector: Selector!) -> Bool { 57 | return firstDelegateRespondingTo(aSelector) != nil 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Transition/Classes/ModalPresentationControllerSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | /** 29 | * Modal transitions have the option to provide a custom UIPresentationController. This protocol is used 30 | * to obtain that controller once the transition starts. Set the source on the TransitionController. 31 | */ 32 | public protocol ModalPresentationControllerSource: class { 33 | 34 | func modalPresentationController(for presented: UIViewController, presenting: UIViewController?) -> UIPresentationController 35 | } 36 | -------------------------------------------------------------------------------- /Transition/Classes/SharedElement.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | /** 29 | * A container that represents an element that is shared between the from- and toView in the transition. 30 | * It exposes a transitioningView, but can contain any additional information for computing that view's movement between the two views. 31 | */ 32 | public protocol SharedElement { 33 | 34 | /// The view that will be used during the interactive transition (most likely a temporary view such as a snapshot). 35 | var transitioningView : UIView { get } 36 | } 37 | 38 | /** 39 | * The TransitionInteractionController has a property `.sharedElementProvider` which you can set. 40 | */ 41 | public protocol SharedElementProvider : class { 42 | 43 | /// Return the element that should be animated / interacted with between the two transitioning views. 44 | /// This can either represent the view which selection triggered the transition, 45 | /// or if the transition was triggered by an interaction gesture, the logical view for that gesture 46 | /// (derivable using the gesture recognizer that is accessible from the provided interactionController). 47 | func sharedElementForInteractiveTransition(with interactionController: TransitionInteractionController, in operationContext: TransitionOperationContext) -> SharedElement? 48 | } 49 | -------------------------------------------------------------------------------- /Transition/Classes/TransitionAnimation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | /** 29 | * A specification of a basic transition animation. 30 | */ 31 | public protocol TransitionAnimation : class { 32 | 33 | /// Steps required to set up the animation in the given context (f.i. adding extra views such as UIVisualEffectView) 34 | func setup(in operationContext: TransitionOperationContext) 35 | 36 | /// The different layers of animation in the transition 37 | var layers: [AnimationLayer] { get } 38 | 39 | /// The completion function that will be given to a UIViewPropertyAnimator 40 | func completion(position: UIViewAnimatingPosition) 41 | } 42 | -------------------------------------------------------------------------------- /Transition/Classes/TransitionCompletionCoordinator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | /// This class abstracts away the use of a dispatch group 29 | /// that allows us to call a single completion once all animators 30 | /// have completed. 31 | internal class TransitionCompletionCoordinator { 32 | 33 | let group = DispatchGroup() 34 | 35 | private var completionWorkItem: DispatchWorkItem? 36 | private var completion: (() -> ())? 37 | 38 | 39 | func add(animator: UIViewPropertyAnimator) { 40 | group.enter() 41 | animator.addCompletion { [weak self] _ in 42 | self?.group.leave() 43 | } 44 | updateCompletionIfNeeded() 45 | } 46 | 47 | func completion(_ work: @escaping () -> ()) { 48 | self.completion = work 49 | updateCompletionIfNeeded() 50 | } 51 | 52 | private func updateCompletionIfNeeded() { 53 | if let completion = completion { 54 | // Any existing item was scheduled for execution after anything that entered the group thusfar. 55 | // When something new enters, we cancel the currently scheduled workItem and create a new completion workItem. 56 | self.completionWorkItem?.cancel() 57 | 58 | let completionWorkItem = DispatchWorkItem(qos: .userInitiated, block: completion) 59 | group.notify(queue: DispatchQueue.main, work: completionWorkItem) 60 | self.completionWorkItem = completionWorkItem 61 | } 62 | } 63 | 64 | func invalidate() { 65 | self.completionWorkItem?.cancel() 66 | self.completion = nil 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /Transition/Classes/TransitionsSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | 25 | import UIKit 26 | 27 | 28 | /** 29 | * Given either a push or pop operation and a context (containing a.o. the from and to ViewControllers), 30 | * this source provides a specific Transition. This might be one to rule them all, but can also be a different one 31 | * for each operation, for each different combination of from/to VC. 32 | * The interactionController is passed in case the gesture provides necessary context for the animation (e.g. an initial velocity). 33 | */ 34 | public protocol TransitionsSource: class { 35 | 36 | func transitionFor(operationContext: TransitionOperationContext, interactionController: TransitionInteractionController?) -> Transition 37 | 38 | } 39 | -------------------------------------------------------------------------------- /Transition/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 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Transition/Transition.h: -------------------------------------------------------------------------------- 1 | // 2 | // MIT License 3 | // 4 | // Copyright (c) 2017 Touchwonders Commerce B.V. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | 24 | #import 25 | 26 | //! Project version number for Transition_. 27 | FOUNDATION_EXPORT double Transition_VersionNumber; 28 | 29 | //! Project version string for Transition_. 30 | FOUNDATION_EXPORT const unsigned char Transition_VersionString[]; 31 | --------------------------------------------------------------------------------