SwipeTransition
Allows trendy transitions using swipe gesture such as "swipe back anywhere".
Install / Use
/learn @tattn/SwipeTransitionREADME
SwipeTransition allows trendy transitions using swipe gesture such as "swipe back".
<img src="https://github.com/tattn/SwipeTransition/raw/main/docs/assets/demo.gif" alt="Demo" width="50%" />Try the demo on the web (appetize.io): https://appetize.io/app/pebm8kveqhfj3wn204adn0xu8r
Features
- [x] Swipe back anywhere.
- [x] Swipe to dismiss anywhere.
- [x] Apply to all view controllers automatically!
- [x] No conflict of gestures on
UIScrollView,UITableView,UICollectionViewand so on.
Requirements
- Xcode 15.0
- iOS 14.0+
Installation
Swift Package Manager
You can install this package with Swift Package Manager.
CocoaPods
pod "SwipeTransition"
pod "SwipeTransitionAutoSwipeBack" # if needed
pod "SwipeTransitionAutoSwipeToDismiss" # if needed
Usage
The easiest way to use
Just setting these frameworks in the Linked Frameworks and Libraries, it works. (if you use Swift Package Manager)

Notes: these frameworks use Method Swizzling.
If you want to set up manually without Method Swizzling, please use SwipeTransition only.
Manually set up
<details> <summary><i>Notes: if you use `AutoSwipeBack.framework`, these are unnecessary.</i></summary><br>Just use SwipeBackNavigationController instead of UINavigationController. Of course, you can set it with Interface Builder.
let viewController = UIViewController()
let navigationController = SwipeBackNavigationController(rootViewControlelr: viewController)
Another way is to set swipeBack.
class CustomNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
swipeBack = SwipeBackController(navigationController: self)
}
}
</details>
<details>
<summary><i>Notes: if you use `AutoSwipeToDismiss.framework`, these are unnecessary.</i></summary><br>
Just use SwipeToDismissNavigationController instead of UINavigationController. Of course, you can set it with Interface Builder.
let viewController = UIViewController()
let navigationController = SwipeToDismissNavigationController(rootViewControlelr: viewController)
Another way is to set swipeToDismiss.
class CustomNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
modalPresentationStyle = .fullScreen
swipeToDismiss = SwipeToDismissController(viewController: self)
}
}
</details>
Enable/Disable gestures
Use isEnabled property.
self.navigationController?.swipeBack?.isEnabled = false
self.swipeToDismiss?.isEnabled = false
Configuration
You can also change the behavior such as animation.
SwipeBackConfiguration.shared.parallaxFactor = 0.6
SwipeToDismissConfiguration.shared.dismissHeightRatio = 0.5
Inheriting the configure class, you can set it with computed property.
class CustomSwipeBackConfiguration: SwipeBackConfiguration {
override var transitionDuration: TimeInterval {
get { return 1.5 }
set { super.transitionDuration = newValue }
}
}
SwipeBackConfiguration.shared = CustomSwipeBackConfiguration()
Other usage
See this wiki
Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature - Commit your changes:
git commit -am 'Add some feature' - Push to the branch:
git push origin my-new-feature - Submit a pull request :D
Support this project
Donating to help me continue working on this project.
ToDo
- [ ] All
.modalPresentationStylesupport - [ ] Animation support (fade / custom)
- [ ] Some transition styles support (e.g. right to left swipe transition)
License
SwipeTransition is released under the MIT license. See LICENSE for details.

