{"id":2402,"url":"https://github.com/davdroman/swiftui-navigation-transitions","last_synced_at":"2025-04-14T06:04:07.550Z","repository":{"id":62742362,"uuid":"553564385","full_name":"davdroman/swiftui-navigation-transitions","owner":"davdroman","description":"Pure SwiftUI Navigation transitions ✨","archived":false,"fork":false,"pushed_at":"2024-11-01T10:28:31.000Z","size":272,"stargazers_count":924,"open_issues_count":6,"forks_count":42,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-14T06:03:50.535Z","etag":null,"topics":["animation","native","navigation","navigationstack","navigationview","pure","swiftui","transition","uiviewcontrollertransitioningdelegate"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davdroman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-18T12:10:50.000Z","updated_at":"2025-04-11T08:02:17.000Z","dependencies_parsed_at":"2024-11-29T11:08:33.416Z","dependency_job_id":"7b6d517c-6538-494f-81de-7f248fd4edd9","html_url":"https://github.com/davdroman/swiftui-navigation-transitions","commit_stats":{"total_commits":101,"total_committers":3,"mean_commits":"33.666666666666664","dds":0.01980198019801982,"last_synced_commit":"76ae9c621422a1f38c30a07c8b7636994b669484"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davdroman%2Fswiftui-navigation-transitions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davdroman%2Fswiftui-navigation-transitions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davdroman%2Fswiftui-navigation-transitions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davdroman%2Fswiftui-navigation-transitions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davdroman","download_url":"https://codeload.github.com/davdroman/swiftui-navigation-transitions/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248830395,"owners_count":21168272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animation","native","navigation","navigationstack","navigationview","pure","swiftui","transition","uiviewcontrollertransitioningdelegate"],"created_at":"2024-01-05T20:16:12.875Z","updated_at":"2025-04-14T06:04:07.485Z","avatar_url":"https://github.com/davdroman.png","language":"Swift","funding_links":[],"categories":["UI","Libs","Animation"],"sub_categories":["Transition","UI","Content"],"readme":"# NavigationTransitions\n\n[![CI](https://github.com/davdroman/swiftui-navigation-transitions/actions/workflows/ci.yml/badge.svg)](https://github.com/davdroman/swiftui-navigation-transitions/actions/workflows/ci.yml)\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fdavdroman%2Fswiftui-navigation-transitions%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions)\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fdavdroman%2Fswiftui-navigation-transitions%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions)\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"320\" src=\"https://user-images.githubusercontent.com/2538074/201549712-4234ca45-bdeb-42c4-9ee9-8d44b346ecdd.gif\"\u003e\n\u003cimg width=\"320\" src=\"https://user-images.githubusercontent.com/2538074/201549897-147e90a0-3773-42ab-94bc-1065fbb7a66b.gif\"\u003e\n\u003cimg width=\"320\" src=\"https://user-images.githubusercontent.com/2538074/201549995-62b86d4a-aa8b-4a6e-9bb4-5ed70cd47d84.gif\"\u003e\n\u003cimg width=\"320\" src=\"https://user-images.githubusercontent.com/2538074/201550282-64ce0f8e-8f99-4fe2-baf8-583e35c0518a.gif\"\u003e\n\u003c/p\u003e\n\n**NavigationTransitions** is a library that integrates seamlessly with SwiftUI's `NavigationView` and `NavigationStack`, allowing complete customization over **push and pop transitions**!\n\n## Overview\n\nInstead of reinventing the entire navigation stack just to control its transitions, `NavigationTransitions` ships with a **simple modifier** that can be applied directly to SwiftUI's very own **first-party navigation** components.\n\n### The Basics\n\n#### iOS 13+\n\n```swift\nNavigationView {\n  // ...\n}\n.navigationViewStyle(.stack)\n.navigationTransition(.slide)\n```\n\n#### iOS 16+\n\n```swift\nNavigationStack {\n  // ...\n}\n.navigationTransition(.slide)\n```\n\n---\n\nThe API is designed to resemble that of built-in SwiftUI Transitions for maximum **familiarity** and **ease of use**.\n\nYou can apply **custom animations** just like with standard SwiftUI transitions:\n\n```swift\n.navigationTransition(\n    .fade(.in).animation(.easeInOut(duration: 0.3))\n)\n```\n\nYou can **combine** them:\n\n```swift\n.navigationTransition(\n    .slide.combined(with: .fade(.in))\n)\n```\n\nAnd you can **dynamically** choose between transitions based on logic:\n\n```swift\n.navigationTransition(\n    reduceMotion ? .fade(.in).animation(.linear) : .slide(.vertical)\n)\n```\n\n### Transitions\n\nThe library ships with some **standard transitions** out of the box:\n\n- [`default`](Sources/NavigationTransition/Default.swift)\n- [`fade(_:)`](Sources/NavigationTransition/Fade.swift)\n- [`slide(axis:)`](Sources/NavigationTransition/Slide.swift)\n\nIn addition to these, you can create fully [**custom transitions**](https://davdroman.github.io/swiftui-navigation-transitions/main/documentation/navigationtransitions/custom-transitions/) in just a few lines of SwiftUI-like code!\n\n```swift\nstruct Swing: NavigationTransitionProtocol {\n    var body: some NavigationTransitionProtocol {\n        Slide(axis: .horizontal)\n        MirrorPush {\n            let angle = 70.0\n            let offset = 150.0\n            OnInsertion {\n                ZPosition(1)\n                Rotate(.degrees(-angle))\n                Offset(x: offset)\n                Opacity()\n                Scale(0.5)\n            }\n            OnRemoval {\n                Rotate(.degrees(angle))\n                Offset(x: -offset)\n            }\n        }\n    }\n}\n```\n\nThe [**Demo**](Examples/Demo) app showcases some of these transitions in action.\n\n### Interactivity\n\nA sweet additional feature is the ability to override the behavior of the **pop gesture** on the navigation view:\n\n```swift\n.navigationTransition(.slide, interactivity: .pan) // full-pan screen gestures!\n```\n\nThis even works to override its behavior while maintaining the **default system transition** in iOS:\n\n```swift\n.navigationTransition(.default, interactivity: .pan) // ✨\n```\n\n## Documentation\n\nThe documentation for releases and `main` are available here:\n\n- [`main`](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/main/documentation/navigationtransitions)\n- [0.13.3](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.13.3/documentation/navigationtransitions)\n\n\u003cdetails\u003e\n\u003csummary\u003e\nOther versions\n\u003c/summary\u003e\n\n- [0.13.2](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.13.2/documentation/navigationtransitions)\n- [0.13.1](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.13.1/documentation/navigationtransitions)\n- [0.13.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.13.0/documentation/navigationtransitions)\n- [0.12.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.12.0/documentation/navigationtransitions)\n- [0.11.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.11.0/documentation/navigationtransitions)\n- [0.10.1](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.10.1/documentation/navigationtransitions)\n- [0.10.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.10.0/documentation/navigationtransitions)\n- [0.9.3](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.9.3/documentation/navigationtransitions)\n- [0.9.2](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.9.2/documentation/navigationtransitions)\n- [0.9.1](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.9.1/documentation/navigationtransitions)\n- [0.9.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.9.0/documentation/navigationtransitions)\n- [0.8.1](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.8.1/documentation/navigationtransitions)\n- [0.8.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.8.0/documentation/navigationtransitions)\n- [0.7.4](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.7.4/documentation/navigationtransitions)\n- [0.7.3](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.7.3/documentation/navigationtransitions)\n- [0.7.2](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.7.2/documentation/navigationtransitions)\n- [0.7.1](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.7.1/documentation/navigationtransitions)\n- [0.7.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.7.0/documentation/navigationtransitions)\n- [0.6.0](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.6.0/documentation/navigationtransitions)\n- [0.5.1](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.5.1/documentation/navigationtransitions)\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavdroman%2Fswiftui-navigation-transitions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavdroman%2Fswiftui-navigation-transitions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavdroman%2Fswiftui-navigation-transitions/lists"}