├── .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 |
--------------------------------------------------------------------------------