{"id":15288682,"url":"https://github.com/exyte/animatedtabbar","last_synced_at":"2025-04-08T08:11:07.972Z","repository":{"id":65756133,"uuid":"592172633","full_name":"exyte/AnimatedTabBar","owner":"exyte","description":"A tabbar with a number of preset animations written in pure SwiftUI","archived":false,"fork":false,"pushed_at":"2025-03-26T10:37:09.000Z","size":262,"stargazers_count":455,"open_issues_count":1,"forks_count":30,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-01T07:40:26.735Z","etag":null,"topics":["animation","ios-component","swift","swiftui","swiftui-components","tabbar","tabbarcontroller"],"latest_commit_sha":null,"homepage":"https://exyte.com/","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/exyte.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":"2023-01-23T05:18:35.000Z","updated_at":"2025-04-01T04:02:04.000Z","dependencies_parsed_at":"2024-07-10T08:26:03.027Z","dependency_job_id":"a1f1ccc2-1a13-4288-91bb-b071448610ee","html_url":"https://github.com/exyte/AnimatedTabBar","commit_stats":{"total_commits":10,"total_committers":1,"mean_commits":10.0,"dds":0.0,"last_synced_commit":"4fb0d62a4dd02e2417deed04313520a700dc2d5f"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2FAnimatedTabBar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2FAnimatedTabBar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2FAnimatedTabBar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2FAnimatedTabBar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exyte","download_url":"https://codeload.github.com/exyte/AnimatedTabBar/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247801155,"owners_count":20998338,"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","ios-component","swift","swiftui","swiftui-components","tabbar","tabbarcontroller"],"created_at":"2024-09-30T15:52:04.574Z","updated_at":"2025-04-08T08:11:07.948Z","avatar_url":"https://github.com/exyte.png","language":"Swift","readme":"\u003ca href=\"https://exyte.com/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/exyte/media/master/common/header-dark.png\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/exyte/media/master/common/header-light.png\"\u003e\u003c/picture\u003e\u003c/a\u003e\n\n\u003ca href=\"https://exyte.com/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/exyte/media/master/common/our-site-dark.png\" width=\"80\" height=\"16\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/exyte/media/master/common/our-site-light.png\" width=\"80\" height=\"16\"\u003e\u003c/picture\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"https://twitter.com/exyteHQ\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/exyte/media/master/common/twitter-dark.png\" width=\"74\" height=\"16\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/exyte/media/master/common/twitter-light.png\" width=\"74\" height=\"16\"\u003e\n\u003c/picture\u003e\u003c/a\u003e \u003ca href=\"https://exyte.com/contacts\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/exyte/media/master/common/get-in-touch-dark.png\" width=\"128\" height=\"24\" align=\"right\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/exyte/media/master/common/get-in-touch-light.png\" width=\"128\" height=\"24\" align=\"right\"\u003e\u003c/picture\u003e\u003c/a\u003e\n\n![demo](https://user-images.githubusercontent.com/9447630/217482148-8594b3ce-e6be-4e84-a65d-29915566a61a.gif)\n\n\u003cp\u003e\u003ch1 align=\"left\"\u003eAnimated Tab Bar\u003c/h1\u003e\u003c/p\u003e\n\n\u003cp\u003e\u003ch4\u003eAnimatedTabBar is a tabbar with a number of preset animations written in pure SwiftUI\u003c/h4\u003e\u003c/p\u003e\n\n\u003ca href=\"https://exyte.com/blog/swiftui-animated-tabbar\"\u003eRead Article »\u003c/a\u003e\n\n![](https://img.shields.io/github/v/tag/exyte/AnimatedTabBar?label=Version)\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fexyte%2FAnimatedTabBar%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/exyte/AnimatedTabBar)\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fexyte%2FAnimatedTabBar%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/exyte/AnimatedTabBar)\n[![SPM](https://img.shields.io/badge/SPM-Compatible-brightgreen.svg)](https://swiftpackageindex.com/exyte/AnimatedTabBar)\n[![Cocoapods](https://img.shields.io/badge/Cocoapods-Deprecated%20after%200.1.4-yellow.svg)](https://cocoapods.org/pods/ExyteAnimatedTabBar)\n[![License: MIT](https://img.shields.io/badge/License-MIT-black.svg)](https://opensource.org/licenses/MIT)\n\n# Usage\n1. Add an `Int` to store the current selection    \n2. Pass your buttons to the AnimatedTabBar using one of 2 initializers. For the first one you can pass any view type:  \n```swift\nimport AnimatedTabBar\n\nAnimatedTabBar(selectedIndex: $selectedIndex) {\n    TabButton1()\n    TabButton2()\n    TabButton3()\n}\n```\n\nFor the second one the views must have the same type, or be manually converted to `AnyView`\n```swift\nAnimatedTabBar(selectedIndex: $selectedIndex, views: [TabButton1(), TabButton2(), TabButton3()])\n```\n\n### Required parameters \n`selectedIndex` - binding to the current index     \n`views` - buttons to display in the tabbar  \n\n### Available customizations - modifiers\nuse the `customize` closure in the popup modifier:\n\n`barColor` - Color of the tabbar itself      \n`selectedColor` - Selected tab color (use template rendering for this color to be applied properly)    \n`unselectedColor` - Unselected tab color     \n`ballColor` - Ball indicator color    \n`verticalPadding` - Space from the buttons to the bar's top and bottom edges    \n`cornerRadius` - The corner radius applied to the tabbar background color     \n`ballAnimation` - Animation curve to apply to ball motion, default is .easeOut(duration: 0.6)\n`indentAnimation` - Animation curve for growing/shrinking of the indent in the tabbar       \n`buttonsAnimation` - Animation curve for applying color to tab buttons    \n`didSelectIndex` - Closure which gets called on every tab tap    \n\n`ballTrajectory` - Options for ball indicator animation paths:     \n- `parabolic`  - Jump to the selected button following a parabolic arc     \n- `teleport` - Disappear and quickly re-appear above selected tab\n- `straight` - Slide to the selected tab        \n\n### Built-in animatable tab buttons\nBy default tabs only have a simple color animation, but you can customize that. This library has two built-in button types you can use out-of-the-box: `DropletButton` and `WiggleButton`, and a super custom `ColorButton` type in the Example project. Please feel free to use them in your projects or build your own buttons on top of them.\n\n## Examples\n\nTo try the AnimatedTabBar examples:\n- Clone the repo `https://github.com/exyte/AnimatedTabBar.git`\n- Open `AnimatedTabBarExample.xcodeproj` in the Xcode\n- Try it!\n\n## Installation\n\n### [Swift Package Manager](https://swift.org/package-manager/)\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/exyte/AnimatedTabBar.git\")\n]\n```\n\n## Requirements\n\n* iOS 16+\n* Xcode 14+ \n\n## Acknowledgements\n\nMany thanks to [Yeasin Arafat](https://dribbble.com/shots/14883627-Tab-Bar-Animation) for their beautiful original work that we recreated with SwiftUI.\n\n## Our other open source SwiftUI libraries\n[PopupView](https://github.com/exyte/PopupView) - Toasts and popups library   \n[AnchoredPopup](https://github.com/exyte/AnchoredPopup) - Anchored Popup grows \"out\" of a trigger view (similar to Hero animation)    \n[Grid](https://github.com/exyte/Grid) - The most powerful Grid container    \n[ScalingHeaderScrollView](https://github.com/exyte/ScalingHeaderScrollView) - A scroll view with a sticky header which shrinks as you scroll    \n[MediaPicker](https://github.com/exyte/mediapicker) - Customizable media picker     \n[Chat](https://github.com/exyte/chat) - Chat UI framework with fully customizable message cells, input view, and a built-in media picker  \n[OpenAI](https://github.com/exyte/OpenAI) Wrapper lib for [OpenAI REST API](https://platform.openai.com/docs/api-reference/introduction)    \n[AnimatedGradient](https://github.com/exyte/AnimatedGradient) - Animated linear gradient     \n[ConcentricOnboarding](https://github.com/exyte/ConcentricOnboarding) - Animated onboarding flow    \n[FloatingButton](https://github.com/exyte/FloatingButton) - Floating button menu    \n[ActivityIndicatorView](https://github.com/exyte/ActivityIndicatorView) - A number of animated loading indicators    \n[ProgressIndicatorView](https://github.com/exyte/ProgressIndicatorView) - A number of animated progress indicators    \n[FlagAndCountryCode](https://github.com/exyte/FlagAndCountryCode) - Phone codes and flags for every country    \n[SVGView](https://github.com/exyte/SVGView) - SVG parser    \n[LiquidSwipe](https://github.com/exyte/LiquidSwipe) - Liquid navigation animation    \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexyte%2Fanimatedtabbar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexyte%2Fanimatedtabbar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexyte%2Fanimatedtabbar/lists"}