{"id":2646,"url":"https://github.com/exyte/fan-menu","last_synced_at":"2025-05-16T18:06:54.383Z","repository":{"id":56911064,"uuid":"88260361","full_name":"exyte/fan-menu","owner":"exyte","description":"Menu with a circular layout based on Macaw","archived":false,"fork":false,"pushed_at":"2023-07-25T02:49:52.000Z","size":88042,"stargazers_count":732,"open_issues_count":2,"forks_count":58,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-05-16T04:24:34.617Z","etag":null,"topics":["animation","ios","menu","swift","ui"],"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/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}},"created_at":"2017-04-14T10:55:56.000Z","updated_at":"2025-04-29T09:27:20.000Z","dependencies_parsed_at":"2024-01-29T18:06:40.665Z","dependency_job_id":null,"html_url":"https://github.com/exyte/fan-menu","commit_stats":{"total_commits":147,"total_committers":12,"mean_commits":12.25,"dds":0.4285714285714286,"last_synced_commit":"2b18b3de88ab2118b4adf5dd9924e39b725ae772"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2Ffan-menu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2Ffan-menu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2Ffan-menu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exyte%2Ffan-menu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exyte","download_url":"https://codeload.github.com/exyte/fan-menu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254582905,"owners_count":22095518,"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","menu","swift","ui"],"created_at":"2024-01-05T20:16:19.152Z","updated_at":"2025-05-16T18:06:54.358Z","avatar_url":"https://github.com/exyte.png","language":"Swift","funding_links":[],"categories":["UI","Libs","Swift","UI [🔝](#readme)","Content"],"sub_categories":["Menu","UI","Other free courses"],"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\u003cimg align=\"right\" src=\"https://raw.githubusercontent.com/exyte/fan-menu/master/demo.gif\" width=\"480\" /\u003e\n\n\u003cp\u003e\u003ch1 align=\"left\"\u003eFanMenu\u003c/h1\u003e\u003c/p\u003e\n\n\u003cp\u003e\u003ch4\u003eEasily customizable floating circle menu created with \u003ca href=\"https://github.com/exyte/Macaw\"\u003eMacaw\u003c/a\u003e\u003c/h4\u003e\u003c/p\u003e\n\n[![Version](https://img.shields.io/cocoapods/v/FanMenu.svg?style=flat)](http://cocoapods.org/pods/FanMenu)\n[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-0473B3.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![License](https://img.shields.io/cocoapods/l/FanMenu.svg?style=flat)](http://cocoapods.org/pods/FanMenu)\n[![Platform](https://img.shields.io/cocoapods/p/FanMenu.svg?style=flat)](http://cocoapods.org/pods/FanMenu)\n[![Twitter](https://img.shields.io/badge/Twitter-@exyteHQ-blue.svg?style=flat)](http://twitter.com/exyteHQ)\n\n# Usage\n1. Create `UIView` in your storyboard or programatically.\n2. Set `FanMenu` as `UIView` class.\n3. Set the button\n```swift\nfanMenu.button = FanMenuButton(\n    id: \"main\",\n    image: \"plus\",\n    color: Color(val: 0x7C93FE)\n)\n```\n4. Set menu items\n```swift\nfanMenu.items = [\n    FanMenuButton(\n        id: \"exchange_id\",\n        image: \"exchange\",\n        color: Color(val: 0x9F85FF)\n    ),\n    ...\n    FanMenuButton(\n        id: \"visa_id\",\n        image: \"visa\",\n        color: Color(val: 0xF55B58)\n    )\n]\n```\n5. Add an event handler\n```swift\n// call before animation\nfanMenu.onItemDidClick = { button in\n    print(\"ItemDidClick: \\(button.id)\")\n}\n// call after animation\nfanMenu.onItemWillClick = { button in\n    print(\"ItemWillClick: \\(button.id)\")\n}\n```\n6. Configure optional parameters\n```swift\n// distance between button and items\nfanMenu.menuRadius = 90.0\n\n// animation duration\nfanMenu.duration = 0.35\n\n// menu opening delay\nfanMenu.delay = 0.05\n\n// interval for buttons in radians\nfanMenu.interval = (0, 2.0 * M_PI)\n\n// menu background color\nfanMenu.menuBackground = Color.red\n```\n\n7. Useful methods\n```swift\nfanMenu.isOpen\nfanMenu.open()\nfanMenu.close()\n```\n\n## Customization\n\nFanMenu is created with [Macaw](https://github.com/exyte/Macaw), our vector graphics Swift library. Thanks to that, it can be easily modified and improved for your purposes.\n\nAll source code is located in one single file called FanMenu.swift. To modify the menu simply copy this file and apply necessary changes.\n\n\u003cimg src=\"http://i.imgur.com/1JXF60f.gif\" height=\"500\"\u003e\n\n## Examples\n\nTo try out the FanMenu examples:\n- Clone the repo `git clone git@github.com:exyte/fan-menu.git`\n- Open terminal and run `cd \u003cFanMenuRepo\u003e/Example`\n- Run `pod install` to install all dependencies\n- Run `xed .` to open project in the Xcode\n- Try it!\n\nWe have the following examples:\n\n- [FinanceViewController.swift](https://github.com/exyte/fan-menu/blob/master/Example/Example/FinanceViewController.swift)\nAccounting \u0026 Financial Management. Inspired by [Yingfang Xie](https://dribbble.com/Melodyblue).\n- [TaskViewController.swift](https://github.com/exyte/fan-menu/blob/master/Example/Example/TaskViewController.swift)\nColor Coding Microinteraction. Insipred by [Filippos Protogeridis](https://dribbble.com/protogeridis).\n- [ShopViewController.swift](https://github.com/exyte/fan-menu/blob/master/Example/Example/ShopViewController.swift)\nInspired by [Tice](https://dribbble.com/Tice).\n- [CustomViewController.swift](https://github.com/exyte/fan-menu/blob/master/Example/Example/CustomViewController.swift) Inspired by awesome Ramotion control [circle-menu](https://github.com/Ramotion/circle-menu)\n\n## Installation\n\n### CocoaPods\n\n```ruby\npod 'FanMenu'\n```\n\n### Carthage\n\n```ogdl\ngithub 'Exyte/fan-menu'\n```\n\n### Manually\n\nDrop [FanMenu.swift](https://github.com/exyte/fan-menu/blob/master/Sources/FanMenu.swift) into your project.\n\n## Requirements\n\n* iOS 9.0+ / macOS 10.12+\n* Xcode 10.2+\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexyte%2Ffan-menu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexyte%2Ffan-menu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexyte%2Ffan-menu/lists"}