/Hover

🎈 The smartest floating button

Primary LanguageSwiftMIT LicenseMIT

Presentation

🎈 What's Hover?

Hover (/ˈhɒv.ər/), verb

"to stay in one place in the air"

Hover is a draggable floating action button (FAB) inspired by Apple's session Designing Fluid Interfaces & Nathan Gitter's fluid-interfaces. Hover will always stick to the nearest corner to avoid blocking content and allows the user to send it to any other corner with a single swipe.

CocoaPods Carthage compatible apm

📦 Installation

CocoaPods

Add the following line to your podfile:

pod 'Hover'

And then run the following command in terminal:

pod install

Carthage

Add the following line to your cartfile:

github "pedrommcarrasco/Hover"

And then run the following command in terminal:

carthage update

⌨️ Usage Example

After installing Hover, you should start by importing the framework:

import Hover

Once imported, you can start using Hover like follows:

// Create Hover's Configuration (all parameters have defaults)
let configuration = HoverConfiguration(icon: UIImage(named: "add"), color: .gradient(top: .blue, bottom: .cyan))

// Create the items to display
let items = [
    HoverItem(title: "Drop it Anywhere", image: UIImage(named: "anywhere")) { print("Tapped 'Drop it anywhere'") },
    HoverItem(title: "Gesture Driven", image: UIImage(named: "gesture")) { print("Tapped 'Gesture driven'") },
    HoverItem(title: "Give it a Star", image: UIImage(named: "star")) { print("Tapped 'Give it a star'") }
]

// Create an HoverView with the previous configuration & items
let hoverView = HoverView(with: configuration, items: items)

// Add to the top of the view hierarchy
view.addSubview(hoverView)
hoverView.translatesAutoresizingMaskIntoConstraints = false

// Apply Constraints
// Never constrain to the safe area as Hover takes care of that
NSLayoutConstraint.activate(
    [
        hoverView.topAnchor.constraint(equalTo: view.topAnchor),
        hoverView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        hoverView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        hoverView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
    ]
)

For more details about all the parameters that you can configure, take a look into HoverConfiguration.swift.

📲 Sample Project

There's a sample project in this repository with some samples of Hover called Example.

🙌 Contributing

Feel free to contribute to this project by reporting bugs or open pull requests.

Hover was created for personal use but dynamic enough to be an open-source framework. As such, while functional, it may lack some additional customization. If there's something missing that you need, feel free to ask me here or on Twitter.

⛔ License

Constrictor's available under the MIT license. See the LICENSE file for more information.