All Projects → IdeasOnCanvas → Aiolos

IdeasOnCanvas / Aiolos

Licence: mit
A floating panel for your iOS Apps

Programming Languages

swift
15916 projects
objective c
16641 projects - #2 most used programming language

Projects that are alternatives of or similar to Aiolos

Ppasyncdrawingkit
This is a iOS asynchronously drawing view Kit.
Stars: ✭ 205 (-86.72%)
Mutual labels:  uikit, ios-ui
Tangerine
Swift µframework for fetching images 🍊
Stars: ✭ 149 (-90.35%)
Mutual labels:  uikit, ios-ui
Overlaycontainer
Non-intrusive iOS UI library to implement overlay based interfaces
Stars: ✭ 777 (-49.68%)
Mutual labels:  uikit, panel
Uiadmin
UIAdmin - UI Kit 3 Responsive Admin Panel
Stars: ✭ 155 (-89.96%)
Mutual labels:  uikit, panel
My flutter challenges
Flutter project containing all my flutter UI challenges
Stars: ✭ 563 (-63.54%)
Mutual labels:  uikit, ios-ui
Qmui ios
QMUI iOS——致力于提高项目 UI 开发效率的解决方案
Stars: ✭ 6,433 (+316.65%)
Mutual labels:  uikit, ios-ui
Qmuidemo ios
Sample Code for QMUI iOS
Stars: ✭ 912 (-40.93%)
Mutual labels:  uikit, ios-ui
Interfacss
The CSS-inspired styling and layout framework for iOS
Stars: ✭ 92 (-94.04%)
Mutual labels:  uikit
Teensy Eurorack
Eurorack shield for teensy 4.1 with 14 in / 16 out analog channels
Stars: ✭ 99 (-93.59%)
Mutual labels:  panel
Basecomponents
BaseComponents aims to provide easily reusable and understandable components to increase productivity with UIKit and Foundation APIs
Stars: ✭ 92 (-94.04%)
Mutual labels:  uikit
Silica
Pure Swift CoreGraphics (Quartz2D) implementation (Supports Linux)
Stars: ✭ 91 (-94.11%)
Mutual labels:  uikit
Hhfloatingview
An easy to use and setup floating view for your app. 🎡
Stars: ✭ 93 (-93.98%)
Mutual labels:  ios-ui
Ui Kit For Chrome Extensions
A UI template for designing the options/settings page for Chrome Extensions. It resembles the exact look as the native settings page of Chrome Browser.
Stars: ✭ 100 (-93.52%)
Mutual labels:  uikit
Kirby Git Content
Commit and Push changes made via the Panel
Stars: ✭ 92 (-94.04%)
Mutual labels:  panel
Swiftcocoadsl
An easy way to write iOS UI
Stars: ✭ 103 (-93.33%)
Mutual labels:  ios-ui
Appearancenavigationcontroller
Example with advanced configuration of the navigation controller's appearance
Stars: ✭ 91 (-94.11%)
Mutual labels:  uikit
Boden
Purely native C++ cross-platform GUI framework for Android and iOS development. https://www.boden.io
Stars: ✭ 1,394 (-9.72%)
Mutual labels:  ios-ui
Class101 Ui
💅A React-based UI Component Library.
Stars: ✭ 102 (-93.39%)
Mutual labels:  uikit
Datingapp
Dating UI kit is used for online meet up with girls and boys . The screen contains more than 30 icons and most of all required elements required to design an application like this. The XML and JAVA files contains comments at each and every point for easy understanding. Everything was made with a detail oriented style and followed by today's web trends. Clean coded & Layers are well-organized, carefully named, and grouped.
Stars: ✭ 97 (-93.72%)
Mutual labels:  uikit
Taiga Ui
Angular UI Kit and components library for awesome people
Stars: ✭ 1,353 (-12.37%)
Mutual labels:  uikit

Aiolos

Yet another iOS Floating Panel

Carthage Compatible SPM compatible Platform iOS Language Swift Twitter: @myell0w

Aiolos, ancient greek for quick-moving/nimble, is a Swift UI framework inspired by the floating panel, that was introduced to Maps app in iOS 11. Give it a try in MindNode 5 for iOS (free trial available).

It is fully gesture-driven, takes safe area insets into account, has support for right-to-left languages baked in and automatically reacts to the on-screen keyboard. Compared to many other open source panel solutions, Aiolos is designed to be an always-visible child view controller, and therefore does not use the custom view controller transition API of iOS.

MindNode for iPad and iPhone

Integration with Carthage

Add this line to your Cartfile.

github "IdeasOnCanvas/Aiolos"

Integration with Swift Package Manager

Aiolos can be integrated with Swift Package Manager directly within Xcode.

Usage in Code

There's a demo app, that demonstrates how the Panel can be set up with a different configuration for iPhones and iPads.

func makePanel(with contentViewController: UIViewController) -> Panel {
    // create Panel with default configuration
    let configuration = Panel.Configuration.default
    let panelController = Panel(configuration: configuration)

    // specify, which ViewController is displayed in the panel
    panelController.contentViewController = contentViewController

    // setup delegates that handle size configuration and animation callbacks
    panelController.sizeDelegate = self
    panelController.animationDelegate = self

    // change the configuration to fit you needs
    panelController.configuration.position = self.panelPosition(for: self.traitCollection)
    panelController.configuration.margins = self.panelMargins(for: self.traitCollection)
    panelController.configuration.appearance.separatorColor = .white

    // we want a different look/behaviour on iPhone compared to iPad
    if self.traitCollection.userInterfaceIdiom == .pad {
        panelController.configuration.appearance.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMaxXMaxYCorner]
    } else {
        panelController.configuration.supportedModes = [.minimal, .compact, .expanded, .fullHeight]
        panelController.configuration.appearance.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
    }

    return panelController
}

Configuring the size

extension ViewController: PanelSizeDelegate {

    func panel(_ panel: Panel, sizeForMode mode: Panel.Configuration.Mode) -> CGSize {
        let width = self.panelWidth(for: self.traitCollection, position: panel.configuration.position)
        switch mode {
        case .minimal:
            return CGSize(width: width, height: 0.0)
        case .compact:
            return CGSize(width: width, height: 64.0)
        case .expanded:
            let height: CGFloat = self.traitCollection.userInterfaceIdiom == .phone ? 270.0 : 320.0
            return CGSize(width: width, height: height)
        case .fullHeight:
            return CGSize(width: width, height: 0.0)
        }
    }
}

Reacting to Panel animations

extension ViewController: PanelAnimationDelegate {

    func panel(_ panel: Panel, willTransitionTo size: CGSize) {
        print("Panel will transition to size \(size)")
    }

    func panel(_ panel: Panel, willTransitionFrom oldMode: Panel.Configuration.Mode?, to newMode: Panel.Configuration.Mode, with coordinator: PanelTransitionCoordinator) {
        print("Panel will transition from \(oldMode) to \(newMode)")
        // we can animate things along the way
        coordinator.animateAlongsideTransition({
            print("Animating alongside of panel transition")
        }, completion: { animationPosition in
            print("Completed panel transition to \(newMode)")
        })
    }
}

Credits

Aiolos is brought to you by IdeasOnCanvas GmbH, the creator of MindNode for iOS, macOS & watchOS

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].