Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leonardocardoso/nfdownloadbutton
Revamped Download Button. It's kinda a reverse engineering of Netflix's app download button.
https://github.com/leonardocardoso/nfdownloadbutton
animation button download ios objective-c swift ui
Last synced: 1 day ago
JSON representation
Revamped Download Button. It's kinda a reverse engineering of Netflix's app download button.
- Host: GitHub
- URL: https://github.com/leonardocardoso/nfdownloadbutton
- Owner: LeonardoCardoso
- License: mit
- Created: 2017-05-19T19:23:48.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-09-29T20:45:33.000Z (about 6 years ago)
- Last Synced: 2024-12-23T15:14:46.844Z (1 day ago)
- Topics: animation, button, download, ios, objective-c, swift, ui
- Language: Swift
- Homepage: https://leocardz.com/nfdowloadbutton-f576fdf30b40
- Size: 8.06 MB
- Stars: 434
- Watchers: 6
- Forks: 32
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
## NFDownloadButton
| || | |
|:-:|:-:|:-:|:-:|
| ![iOS](Images/iOS.gif) | ![watchOS](Images/watchOS.gif) | ![tvOS](Images/tvOS.gif) | ![macOS](Images/macOS.gif) |[![Platform](https://img.shields.io/badge/platform-iOS-orange.svg)](https://github.com/LeonardoCardoso/NFDownloadButton#requirements-and-details)
[![CocoaPods](https://img.shields.io/badge/pod-v0.0.6-red.svg)](https://github.com/LeonardoCardoso/NFDownloadButton#cocoapods)
[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg)](https://github.com/LeonardoCardoso/NFDownloadButton#carthage)> Revamped Download Button
- [Requirements](#requirements)
- [Installation](#installation)
- [Usage](#usage)
- [License](#license)## Requirements
- iOS 8.0+
- Swift 4.2+
- Xcode 10.0+## Installation
### CocoaPods
[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
```bash
$ gem install cocoapods
```> CocoaPods 1.1.0+ is required to build NFDownloadButton 0.0.6+.
To integrate NFDownloadButton into your Xcode project using CocoaPods, specify it in your `Podfile`:
```ruby
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!pod 'NFDownloadButton', '~> 0.0.6'
```Then, run the following command:
```bash
$ pod install
```### Carthage
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.
You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
```bash
$ brew update
$ brew install carthage
```To integrate NFDownloadButton into your Xcode project using Carthage, specify it in your `Cartfile`:
```ogdl
github "LeonardoCardoso/NFDownloadButton" ~> 0.0.6
```### Manually
If you prefer not to use either of the aforementioned dependency managers, you can integrate NFDownloadButton into your project manually.
## Usage
You can use a `NFDownloadButton` on [Storyboards](#storyboard) or, if you want to do it programatically, you can create it just like you create a UIButton:
```swift
let downloadButton = NFDownloadButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
self.parentView.addSubview(downloadButton)
````NFDownloadButton` has four states:
| State 1: To Download | State 2: Will Download | State 3: Ready to Download | State 4: Downloaded |
|:-:|:-:|:-:|:-:|
| ![first](Images/first.gif) | ![second](Images/second.gif) | ![third](Images/third.gif) | ![fourth](Images/fourth.gif) |You can switch between states by just doing as following:
```swift
self.downloadButton.downloadState = .toDownload || .willDownload || .readyToDownload || .downloaded
```When the button is in `.readyToDownload` state, the button will wait for your to upload its progress. You can do it like this:
```swift
self.downloadButton.downloadPercent = 0.5
```
When this value reaches 1.0, then `downloadState` is automatically changed to `.downloaded`.### Downloaded by default
You can select the button as downloaded by default. All states will be overridden by `Downloaded` state and no animation will be performed. To do so, just add `isDownloaded` in its constructor, or set it up whenever you want.
```swift
NFDownloadButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50), isDownloaded: true)
```
```swift
downloadButton.isDownloaded = true
```### Style
`NFDownloadButton` has four different styles of devices: `iOS`, `watchOS`, `tvOS`, `macOS`. Thus you can customize your final result. This option is only available on constructor.
```swift
NFDownloadButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50), isDownloaded: true,
style: .iOS)
```
| iOS | watchOS | tvOS | macOS |
|:-:|:-:|:-:|:-:|
| ![iOS](Images/iOS.png) | ![watchOS](Images/watchOS.png) | ![tvOS](Images/tvOS.png) | ![macOS](Images/macOS.png) |### Palette
You also can customize the colors of the button on its constructor.
```swift
NFDownloadButton(
frame: wrapView.frame,
isDownloaded: true,
style: .iOS,
palette: Palette(
initialColor: UIColor?,
rippleColor: UIColor?,
buttonBackgroundColor: UIColor?,
downloadColor: UIColor?,
deviceColor: UIColor?
)
)
```![palette](Images/palette.png)
### Delegate
You can watch changes of state by implementing the protocol:
```swift
protocol NFDownloadButtonDelegate {func stateChanged(button: NFDownloadButton, newState: NFDownloadButtonState)
}
```### Storyboard
Last but not least, you can customize `NFDownloadButton` properties right from Interface Builder or Storyboards.
![storyboard](Images/storyboard.png)
## License
NFDownloadButton is released under the MIT license. See [LICENSE](https://github.com/LeonardoCardoso/NFDownloadButton/blob/master/LICENSE) for details.