{"id":26015519,"url":"https://github.com/jjochen/jjfloatingactionbutton","last_synced_at":"2025-04-04T10:08:43.273Z","repository":{"id":46217462,"uuid":"108540595","full_name":"jjochen/JJFloatingActionButton","owner":"jjochen","description":"Floating Action Button for iOS","archived":false,"fork":false,"pushed_at":"2024-05-16T21:53:44.000Z","size":18768,"stargazers_count":378,"open_issues_count":15,"forks_count":76,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-04T10:08:35.719Z","etag":null,"topics":["cocoapods","fab","floatingactionbutton","ios","material-design","objective-c","swift"],"latest_commit_sha":null,"homepage":"https://jjochen.github.io/JJFloatingActionButton","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/jjochen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2017-10-27T11:58:35.000Z","updated_at":"2025-03-25T16:51:25.000Z","dependencies_parsed_at":"2023-11-14T10:27:47.525Z","dependency_job_id":"1f6fca8c-09df-45cc-8067-8f20c18123b5","html_url":"https://github.com/jjochen/JJFloatingActionButton","commit_stats":{"total_commits":216,"total_committers":4,"mean_commits":54.0,"dds":"0.34259259259259256","last_synced_commit":"2c561601ec0da6f85c2c061a2560d82d39832951"},"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjochen%2FJJFloatingActionButton","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjochen%2FJJFloatingActionButton/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjochen%2FJJFloatingActionButton/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jjochen%2FJJFloatingActionButton/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jjochen","download_url":"https://codeload.github.com/jjochen/JJFloatingActionButton/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247157283,"owners_count":20893220,"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":["cocoapods","fab","floatingactionbutton","ios","material-design","objective-c","swift"],"created_at":"2025-03-06T03:18:58.802Z","updated_at":"2025-04-04T10:08:43.244Z","avatar_url":"https://github.com/jjochen.png","language":"Swift","readme":"\u003c!-- markdownlint-disable MD033 --\u003e\n\n# JJFloatingActionButton\n\nFloating Action Button for iOS\n\n----\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Swift-5.0-orange.svg\" alt=\"Swift 5.0\" /\u003e\n  \u003ca href=\"https://cocoapods.org/pods/JJFloatingActionButton\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/v/JJFloatingActionButton.svg?style=flat\" alt=\"Version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://cocoapods.org/pods/JJFloatingActionButton\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/l/JJFloatingActionButton.svg?style=flat\" alt=\"License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://cocoapods.org/pods/JJFloatingActionButton\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/p/JJFloatingActionButton.svg?style=flat\" alt=\"Platform\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://circleci.com/gh/jjochen/JJFloatingActionButton\"\u003e\u003cimg src=\"https://circleci.com/gh/jjochen/JJFloatingActionButton.svg?style=shield\" alt=\"Build Status\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/jjochen/JJFloatingActionButton\"\u003e\u003cimg src=\"https://codecov.io/gh/jjochen/JJFloatingActionButton/branch/master/graph/badge.svg\" alt=\"codecov\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codeclimate.com/github/jjochen/JJFloatingActionButton\"\u003e\u003cimg src=\"https://img.shields.io/codeclimate/maintainability/jjochen/JJFloatingActionButton.svg\" alt=\"Code Climate\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://jjochen.github.io/JJFloatingActionButton\"\u003e\u003cimg src=\"https://jjochen.github.io/JJFloatingActionButton/badge.svg\" alt=\"Documentation\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/jjochen/JJFloatingActionButton/issues\"\u003e\u003cimg src=\"https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat\" alt=\"Contributions Welcome\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e • \u003ca href=\"#preview\"\u003ePreview\u003c/a\u003e • \u003ca href=\"#requirements\"\u003eRequirements\u003c/a\u003e • \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e • \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e • \u003ca href=\"#author\"\u003eAuthor\u003c/a\u003e • \u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n## \u003ca name=\"features\"\u003e\u003c/a\u003eFeatures\n\n- Easy to use  ✓\n- Fully customizable  ✓\n- Place with auto layout  ✓\n- Design in Interface Builder  ✓\n- RTL language support  ✓\n- Handles Button with single Action  ✓\n- Works in Swift and Objective-C Projects  ✓\n- Comprehensive Test Coverage  ✓\n- [Complete Documentation](https://jjochen.github.io/JJFloatingActionButton)  ✓\n\n## \u003ca name=\"preview\"\u003e\u003c/a\u003ePreview\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/jjochen/JJFloatingActionButton/raw/master/Images/JJFloatingActionButtonBasics.gif\" width='250' alt=\"Preview Basics\"\u003e\n  \u003cimg src=\"https://github.com/jjochen/JJFloatingActionButton/raw/master/Images/JJFloatingActionButtonConfiguration.gif\" width='250' alt=\"Preview Configuration\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/jjochen/JJFloatingActionButton/raw/master/Images/JJFloatingActionButtonCircular.gif\" width='250' alt=\"Preview Circular\"\u003e\n  \u003cimg src=\"https://github.com/jjochen/JJFloatingActionButton/raw/master/Images/JJFloatingActionButtonSingleItem.gif\" width='250' alt=\"Preview Single Item\"\u003e\n\u003c/p\u003e\n\n## \u003ca name=\"requirements\"\u003e\u003c/a\u003eRequirements\n\n- iOS 13.0+\n- Xcode 14+\n- Swift 5.0\n\n## \u003ca name=\"installation\"\u003e\u003c/a\u003eInstallation\n\n### CocoaPods\n\n[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:\n\n```bash\ngem install cocoapods\n```\n\nTo integrate JJFloatingActionButton into your Xcode project using CocoaPods, specify it in your `Podfile`:\n\n```ruby\nsource 'https://cdn.cocoapods.org/'\nplatform :ios, '13.0'\nuse_frameworks!\n\ntarget '\u003cYour Target Name\u003e' do\n    pod 'JJFloatingActionButton'\nend\n```\n\nThen, run the following command:\n\n```bash\npod install\n```\n\n### Manually\n\nIf you prefer not to use a dependency manager, you can integrate JJFloatingActionButton into your project manually.\n\n## \u003ca name=\"usage\"\u003e\u003c/a\u003eUsage\n\n### Quick Start\n\n```swift\nlet actionButton = JJFloatingActionButton()\n\nactionButton.addItem(title: \"item 1\", image: UIImage(named: \"First\")?.withRenderingMode(.alwaysTemplate)) { item in\n  // do something\n}\n\nactionButton.addItem(title: \"item 2\", image: UIImage(named: \"Second\")?.withRenderingMode(.alwaysTemplate)) { item in\n  // do something\n}\n\nactionButton.addItem(title: \"item 3\", image: nil) { item in\n  // do something\n}\n\nview.addSubview(actionButton)\nactionButton.translatesAutoresizingMaskIntoConstraints = false\nactionButton.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16).isActive = true\nactionButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16).isActive = true\n\n// last 4 lines can be replaced with\n// actionButton.display(inViewController: self)\n```\n\n### Configuration\n\nButton appearance and behavior can be customized:\n\n```swift\nactionButton.handleSingleActionDirectly = false\nactionButton.buttonDiameter = 65\nactionButton.overlayView.backgroundColor = UIColor(white: 0, alpha: 0.3)\nactionButton.buttonImage = UIImage(named: \"Dots\")\nactionButton.buttonColor = .red\nactionButton.buttonImageColor = .white\nactionButton.buttonImageSize = CGSize(width: 30, height: 30)\n\nactionButton.buttonAnimationConfiguration = .transition(toImage: UIImage(named: \"X\"))\nactionButton.itemAnimationConfiguration = .slideIn(withInterItemSpacing: 14)\n\nactionButton.layer.shadowColor = UIColor.black.cgColor\nactionButton.layer.shadowOffset = CGSize(width: 0, height: 1)\nactionButton.layer.shadowOpacity = Float(0.4)\nactionButton.layer.shadowRadius = CGFloat(2)\n\nactionButton.itemSizeRatio = CGFloat(0.75)\nactionButton.configureDefaultItem { item in\n    item.titlePosition = .trailing\n\n    item.titleLabel.font = .boldSystemFont(ofSize: UIFont.systemFontSize)\n    item.titleLabel.textColor = .white\n    item.buttonColor = .white\n    item.buttonImageColor = .red\n\n    item.layer.shadowColor = UIColor.black.cgColor\n    item.layer.shadowOffset = CGSize(width: 0, height: 1)\n    item.layer.shadowOpacity = Float(0.4)\n    item.layer.shadowRadius = CGFloat(2)\n}\n\nactionButton.addItem(title: \"Balloon\", image: UIImage(named: \"Balloon\")) { item in\n    // Do something\n}\n\nlet item = actionButton.addItem()\nitem.titleLabel.text = \"Owl\"\nitem.imageView.image = UIImage(named: \"Owl\")\nitem.buttonColor = .black\nitem.buttonImageColor = .white\nitem.buttonImageColor = CGSize(width: 30, height: 30)\nitem.action = { item in\n    // Do something\n}\n```\n\n### Delegate\n\n```swift\noptional func floatingActionButtonWillOpen(_ button: JJFloatingActionButton)\noptional func floatingActionButtonDidOpen(_ button: JJFloatingActionButton)\noptional func floatingActionButtonWillClose(_ button: JJFloatingActionButton)\noptional func floatingActionButtonDidClose(_ button: JJFloatingActionButton)\n```\n\n### Example\n\nTo run the example project, just run the following command:\n\n```bash\npod try JJFloatingActionButton\n```\n\n### Resources\n\n- [Documentation](https://jjochen.github.io/JJFloatingActionButton/)\n\n## \u003ca name=\"author\"\u003e\u003c/a\u003eAuthor\n\nJochen Pfeiffer [https://github.com/jjochen](https://github.com/jjochen)\n\n## \u003ca name=\"license\"\u003e\u003c/a\u003eLicense\n\nJJFloatingActionButton is available under the MIT license. See the LICENSE file for more info.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjjochen%2Fjjfloatingactionbutton","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjjochen%2Fjjfloatingactionbutton","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjjochen%2Fjjfloatingactionbutton/lists"}