Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/uptechteam/AirBar
iOS library - UIScrollView driven expandable menu.
https://github.com/uptechteam/AirBar
ios swift uiscrollview
Last synced: about 1 month ago
JSON representation
iOS library - UIScrollView driven expandable menu.
- Host: GitHub
- URL: https://github.com/uptechteam/AirBar
- Owner: uptechteam
- License: mit
- Created: 2017-02-24T09:05:16.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2019-11-16T10:39:12.000Z (about 5 years ago)
- Last Synced: 2024-04-24T14:50:36.003Z (9 months ago)
- Topics: ios, swift, uiscrollview
- Language: Swift
- Homepage: https://blog.uptech.team/how-to-implement-expandable-menu-on-ios-like-in-airbnb-3d2bdd97b049
- Size: 5.45 MB
- Stars: 638
- Watchers: 32
- Forks: 53
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - AirBar - UIScrollView driven expandable menu written in Swift 3. (UI / Menu)
- awesome-ios-star - AirBar - UIScrollView driven expandable menu written in Swift 3. (UI / Menu)
- awesome-ios - AirBar - `UIScrollView` driven expandable menu. [•](https://raw.githubusercontent.com/uptechteam/AirBar/master/Logo/Demo.gif) (Content / Menu)
README
UIScrollView driven expandable menu.
## Description
AirBar is a library for creating cool expandable menus.
Library observes UIScrollView scroll and provides state you can apply to your UI elements.## Demo
![AirBar Demo](/Logo/Demo.gif)## Installation
Library supports [Carthage](https://github.com/Carthage/Carthage) dependency manager. To install AirBar add following line to Cartfile in the root folder of your project.
```
github "uptechteam/AirBar" ~> 2.0
```Using [CocoaPods](https://github.com/CocoaPods/CocoaPods) add following line to your project Podfile
```
pod 'AirBar', '~> 2.0'
```Using `Swift Package Manager`, add the following line to your Package.swift:
```
dependencies: [
.package(url: "https://github.com/uptechteam/AirBar.git", .exact("2.0.6")),
],
```## How to use
1) Create `BarController` object using `BarController(configuration Configuration, stateObserver: StateObserver)` initializer, where `Configuration` is struct that contains height config and `StateObserver` is closure that will be called on state change.
2) Bind `BarController` to your `UIScrollView` object using `set(scrollView: UIScrollView)` method.
3) Provide UI transformations in closure passed as `StateObserver` init argument. Closure will receive `State` object that has following public methods:
- `height()` - returns bar height;
- `transitionProgress()` - returns bar transition progress between 0 and 2, where 0 - compact state, 1 - normal state, 2 - expanded state;
- `value(compactNormalRange: ValueRangeType, normalExpandedRange: ValueRangeType)` - returns transformed CGFloat value that can be used for configuring UIKit element properties. `ValueRangeType` is enum with `.range(CGFloat, CGFloat)` and `.value(CGFloat)` cases. You can use it for example if you need static value `1` in normal-expanded transition and range (0, 1) in compact-normal transition.4) (Optional) Contribute to repository.
Also you can find example application in library project.
## Multiple UIScrollView objects
`BarController` supports using multiple `UIScrollView` objects. You can use `preconfigure(scrollView: UIScrollView)` method to configure scrolling view before setting it with `set(scrollView: UIScrollView)` method.## TODO
- Implement expansion/concatination resistance;
- ...