Easily customizable floating button menu created with SwiftUI

We are a development agency building phenomenal apps.

Travis CI Version Carthage Compatible License Platform Twitter


  1. Create main button view and a number of submenu buttons — both should be cast to AnyView type.

  2. Pass both to FloatingButton constructor:

    FloatingButton(mainButtonView: mainButton, buttons: buttons)
  3. You may also pass a binding which will determine if the menu is currently open. You may use this to close the menu on any submenu button tap for example.

FloatingButton(mainButtonView: mainButton, buttons: buttons, isOpen: $isOpen)
  1. Chain .straight() or .circle() to specify desired menu type.
  2. Chain whatever you like afterwards. For example:

    FloatingButton(mainButtonView: mainButton, buttons: textButtons)
        .initialOffset(x: -1000)
    FloatingButton(mainButtonView: mainButton2, buttons: buttonsImage.dropLast())
        .startAngle(3/2 * .pi)
        .endAngle(2 * .pi)

Universal options

spacing – space between submenu buttons
initialScaling – size multiplyer for submenu buttons when the menu is closed
initialOffset – offset for submenu buttons when the menu is closed
initialOpacity – opacity for submenu buttons when the menu is closed
animation – custom SwiftUI animation like Animation.easeInOut() or Animation.spring()
delays – delay for each submenu button’s animation start

Straight menu only options

direction – position of submenu buttons relative to main menu button
alignment – alignment of submenu buttons relative to main menu button

Circle only options



To try out the FloatingButton examples:

  1. Clone the repo git clone [email protected]:exyte/FloatingButton.git.
  2. Open terminal and run cd <FloatingButtonRepo>/Example.
  3. Run pod install to install all dependencies.
  4. Run xed . to open project in the Xcode.
  5. Try it!



pod 'FloatingButton'


github "Exyte/FloatingButton"


Drop FloatingButton.swift into your project.


  • iOS 13+ / watchOS 13+ / tvOS 13+ / macOS 10.15+
  • Xcode 11+