All Projects → SebastianBoldt → Jelly

SebastianBoldt / Jelly

Licence: mit
🌊 - Jelly is a library for animated, non-interactive & interactive viewcontroller transitions and presentations with the focus on a simple and yet flexible API.

Programming Languages

swift
15916 projects
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to Jelly

ViewDidAppearFirstTime
🙈 Adds viewWillAppearFirstTime(_:) and viewDidAppearFirstTime(_:) to UIViewController
Stars: ✭ 14 (-99.4%)
Mutual labels:  uikit, uiviewcontroller
CustomSegueDemo
Demonstrates encapsulation of a custom view controller transition into a UIStoryboardSegue subclass
Stars: ✭ 31 (-98.66%)
Mutual labels:  animations, uiviewcontroller
Viewanimator
ViewAnimator brings your UI to life with just one line
Stars: ✭ 6,592 (+184.26%)
Mutual labels:  uikit, animations
ALButtonMenu
A simple, fully customizable menu solution for iOS.
Stars: ✭ 45 (-98.06%)
Mutual labels:  uikit, uiviewcontroller
JDTextField
Animated UITextField enhance UX for the user by giving clarity that they are focused
Stars: ✭ 19 (-99.18%)
Mutual labels:  uikit, animations
Animatify Ios
Animation, Effects & Transitions for iOS
Stars: ✭ 350 (-84.91%)
Mutual labels:  uikit, animations
Swiftassetspickercontroller
A simple assets picker controller based on iOS 8 Photos framework. Supports iCloud photos and videos. It's written in Swift.
Stars: ✭ 81 (-96.51%)
Mutual labels:  uikit, uiviewcontroller
Nachos Ui
Nachos UI is a React Native component library.
Stars: ✭ 2,037 (-12.16%)
Mutual labels:  uikit
Notus React
Notus React: Free Tailwind CSS UI Kit and Admin
Stars: ✭ 173 (-92.54%)
Mutual labels:  uikit
Ui Motion
How to apply meaningful and delightful motion in a sample Android app
Stars: ✭ 165 (-92.88%)
Mutual labels:  animations
Upcomingmovies
Movies app written in Swift 5 using the TMDb API and demonstrating Clean Architecture, Dependency Injection, MVVM and Coordinators.
Stars: ✭ 160 (-93.1%)
Mutual labels:  uikit
Tosegmentedcontrol
A segmented control in the style of iOS 13 compatible with previous versions of iOS.
Stars: ✭ 174 (-92.5%)
Mutual labels:  uikit
Statefulviewcontroller
Placeholder views based on content, loading, error or empty states
Stars: ✭ 2,139 (-7.76%)
Mutual labels:  uiviewcontroller
Agvolumecontrolview
Visual regulator can be connected to a player or other smart house’s device making the process of controlling the level of a particular characteristic
Stars: ✭ 170 (-92.67%)
Mutual labels:  animations
React Native Animated Spinkit
A collection of loading indicators for React Native
Stars: ✭ 186 (-91.98%)
Mutual labels:  animations
Aim Ik
A Unity-3D library, to procedural orientate character head (and chest) in a direction without using any animation data.
Stars: ✭ 164 (-92.93%)
Mutual labels:  animations
Placeholders
🅿️ Define multiple placeholders for UITextField and animate their change
Stars: ✭ 190 (-91.81%)
Mutual labels:  uikit
Smileviewcontroller
UIViewController which allows to detect smile in real time.
Stars: ✭ 189 (-91.85%)
Mutual labels:  uiviewcontroller
Angular Fx
Angular CSS3 animation directives (ngfx-bounce, ngfx-shake, ngfx-flip, ngfx-pulse and more ...) https://720kb.github.io/angular-fx
Stars: ✭ 181 (-92.19%)
Mutual labels:  animations
Konfetti
Celebrate more with this lightweight confetti particle system 🎊
Stars: ✭ 2,278 (-1.77%)
Mutual labels:  animations

Jelly-Animators: Elegant Viewcontroller Animations in Swift

current version current version twitter handle Swift 4.2 compatible platform carthage support license

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.

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.
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]).

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 & Slide

Some 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. To install it, simply add the following line to your Podfile:

pod 'Jelly', '~> 2.2.2'

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.

current version

Jelly is available under the MIT license. See the LICENSE file for more info.

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].