Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/roberthein/ease
It's magic.
https://github.com/roberthein/ease
animation animations ease easing event events gyroscope observable observables observe observer observer-pattern scenekit spring spring-animation swift swift-5 swift5 system uiscrollview
Last synced: 11 days ago
JSON representation
It's magic.
- Host: GitHub
- URL: https://github.com/roberthein/ease
- Owner: roberthein
- License: mit
- Created: 2017-12-13T18:24:55.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2020-07-14T19:30:10.000Z (over 4 years ago)
- Last Synced: 2024-10-13T14:45:54.486Z (about 1 month ago)
- Topics: animation, animations, ease, easing, event, events, gyroscope, observable, observables, observe, observer, observer-pattern, scenekit, spring, spring-animation, swift, swift-5, swift5, system, uiscrollview
- Language: Swift
- Homepage:
- Size: 78.4 MB
- Stars: 1,261
- Watchers: 22
- Forks: 41
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
**Ease** is an event driven animation system that combines the observer pattern with custom spring animations as observers. **It's magic.**
## Features
- [X] Animate any value type
- [X] Set multiple animations for a single value
- [X] Animation trajectories update when you update the `targetValue`
- [X] Add natural spring behavior to any value change
- [X] Optimized for Swift 5
- [X] Compatible with iOS 9 and up## Supported value types
- CGFloat
- CGPoint
- CGSize
- CGVector
- Int
- Float
- Double
- SCNVector3Easily extendible with more (custom) types.
## Examples
- SceneKit Example👆
- UIKit Examples## How
Create your **Ease** object with an initial value
```swift
var ease: Ease = Ease(view.center, minimumStep: 0.001)
```Add your custom spring-animation(s)
```swift
ease.addSpring(tension: 300, damping: 15, mass: 1) { position in
view.center = position
}
```Set the target value of your Ease object and adjust your target as often as you want
```swift
ease.targetValue = gestureRecognizer.location(in: view)
```## Memory management
For a single spring-animation you can store the returned `EaseDisposable` to a variable
```swift
disposable = ease.addSpring(tension...```
For multiple spring-animations you can add the disposable to a `EaseDisposal` variable
```swift
ease.addSpring(tension...) { }.add(to: &disposal)
```And always weakify `self` when referencing `self` inside your spring-animation
```swift
ease.addSpring(tension...) { [weak self] position in
```## Installation
Ease is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your Podfile:```ruby
pod 'Ease'
```## Suggestions or feedback?
Feel free to create a pull request, open an issue or find [me on Twitter](https://twitter.com/roberthein).