Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/SebastianBoldt/Jelly
🌊 - Jelly is a library for animated, non-interactive & interactive viewcontroller transitions and presentations with the focus on a simple and yet flexible API.
https://github.com/SebastianBoldt/Jelly
animations ios swift uikit uipresentationcontroller uiviewcontroller viewcontroller-transition
Last synced: 3 months ago
JSON representation
🌊 - Jelly is a library for animated, non-interactive & interactive viewcontroller transitions and presentations with the focus on a simple and yet flexible API.
- Host: GitHub
- URL: https://github.com/SebastianBoldt/Jelly
- Owner: SebastianBoldt
- License: mit
- Created: 2016-11-16T18:40:19.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2022-05-31T15:25:28.000Z (over 2 years ago)
- Last Synced: 2024-04-21T16:44:04.061Z (7 months ago)
- Topics: animations, ios, swift, uikit, uipresentationcontroller, uiviewcontroller, viewcontroller-transition
- Language: Swift
- Homepage: http://www.sebastianboldt.com/
- Size: 52.7 MB
- Stars: 2,443
- Watchers: 38
- Forks: 121
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - Jelly - Jelly provides custom view controller transitions with just a few lines of code. (UI / Alert & Action Sheet)
- awesome-swift - Jelly - Jelly provides custom view controller transitions with just a few lines of code. (Libs / UI)
- awesome-swift - Jelly - Jelly provides custom view controller transitions with just a few lines of code. (Libs / UI)
- awesome-ios-star - Jelly - Jelly provides custom view controller transitions with just a few lines of code. (UI / Alert & Action Sheet)
- awesome-ios-1 - SebastianBoldt / Jelly
- fucking-awesome-swift - Jelly - Jelly provides custom view controller transitions with just a few lines of code. (Libs / UI)
- awesome-swift - Jelly - - Jelly is a library for animated, non-interactive & interactive viewcontroller transitions and presentations with the focus on a simple and yet flexible API. ` 📝 2 years ago` (UI [🔝](#readme))
README
![Jelly-Animators: Elegant Viewcontroller Animations in Swift](https://github.com/SebastianBoldt/Jelly/blob/master/Github/Jellyfish.png?raw=true)
Jelly is a library for animated, non-interactive & interactive viewcontroller
transitions and presentations with the focus on a simple and yet flexible API.
With a few lines of source code, interactive UIViewController transitions
and custom resizable UIViewController presentations can be created,
without the use of the cumbersome UIKit Transitioning API.```swift
var slidePresentation = SlidePresentation(direction: .left)
let animator = Animator(presentation: slidePresentation)
animator.prepare(viewController: viewController)
present(viewController, animated: true, completion: nil)
```1. Create a `Presentation` Object
2. Configure an `Animator` with the *Presentation*
3. Call the `prepare` Function
4. Use the native `UIViewController` presentation function.```swift
class ViewController : UIViewController {
var animator: Jelly.Animator?
override func viewDidLoad() {
super.viewDidLoad()
let viewController = YourViewController()
let presentation = SlidePresentation(direction: .left)
animator = Animator(presentation:presentation)
animator?.prepare(presentedViewController: viewController)
present(viewController, animated: true, completion: nil)
}
}
```***DO NOT FORGET TO KEEP A STRONG 💪 REFERENCE***
Because the `transitioningDelegate` of a `UIViewController` is weak, you need to
hold a strong reference to the `Animator` inside the `UIViewController` you are presenting from or
the central object that maintains your presentations.Interactive transitions can be activated for the *slide* and the *cover* transitions.
If the transitions are to be interactive, only an `InteractionConfiguration` object has to be passed to the presentation.
Here 3 parameters play an important role. First, the `completionThreshold`, which determines the percentage of the animation that is automatically completed as soon as the user finishes the interaction.
The second parameter is the actual type of interaction. Jelly offers the `.edge` and the `.canvas` type.
In an `.edge` transition, the user must execute the gesture from the edge of the screen.
When using the `.canvas` type, gesture recognizers are configured so that direct interaction with the presenting and presented view leads to the transition.
The last parameter is called `mode`. Using the mode you can limit the interaction to presentation or dismiss interaction (default = `[.present,.dismiss]`).```swift
let viewController = YourViewController()
let interaction = InteractionConfiguration(presentingViewController: self, completionThreshold: 0.5, dragMode: .edge, mode: .dismiss)
let presentation = SlidePresentation(direction: .right, interactionConfiguration: interaction)
let animator = Animator(presentation: presentation)
animator.prepare(presentedViewController: viewController)```
Jelly 2.0 also provides a new feature called *LIVE UPDATE*.
Using Jellys new `Live Update API` it is now possible to update the `alignment`, `size`, `margin-guards` and `corner radius` when the viewcontroller is already visible.
These are the new live update functions provided by the Animator.
* `updateAlignment(alignment: PresentationAlignment, duration: Duration)` - Cover & Fade
* `updateVerticalAlignment(alignment: VerticalAlignment, duration: Duration)` - Cover & Fade
* `updateHorizontalAlignment(alignment: HorizontalAlignment, duration: Duration)` - Cover & Fade
* `updateSize(presentationSize: PresentationSize, duration: Duration)` - Cover & Fade
* `updateWidth(width: Size, duration: Duration)` - Cover, Fade and horizontal Slide
* `updateHeight(height: Size, duration: Duration)` - Cover, Fade and vertical Slide
* `updateMarginGuards(marginGuards: UIEdgeInsets, duration: Duration)` - Cover & Fade
* `updateCorners(radius: CGFloat, corners: CACornerMask, duration: Duration)` - Cover & Fade & SlideSome of them will throw an exception if used on a not supported presentationType.
For example: It is currently not possible to update the size on a Slide-Presentation.The presentation types can be configured with various settings:
* `size`
* `margin guards`
* `direction`
* `horizontal & vertical alignment`
* `dimmed and blurred backgroundStyle`
* `duration`
* `presentation and dismiss curve`
* `spring damping & velocity`
* `corner specification` & `corner radius`
* `completion threshold`
* `interactive drag mode` (edge or pan)
* `interaction mode` (present, dismiss)
* `parallax` (Just available on slide Presentations)Each component is explained in more detail in the Jelly Wiki.
Deployment target of your App is >= iOS 11.0
Jelly is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your Podfile:```ruby
pod 'Jelly', '~> 2.2.2'
```or use SPM
* Mentioned in iOS Dev Weekly by @Dave Verwer - Issue NO. 112
* Mentioned in This Week in Swift by @Natasha the Robot - Issue No. 279
Sebastian Boldt, https://www.sebastianboldt.com
I am a mobile software architect and developer specializing in iOS.
Passionate about creating awesome user experiences, designing beautiful user interfaces,
and writing maintainable, structured, and best-practice orientated code.
Continuously trying to improve skills and learn new technologies.Jelly is available under the MIT license. See the LICENSE file for more info.