• Stars
    star
    2,445
  • Rank 18,802 (Top 0.4 %)
  • Language
    Swift
  • License
    MIT License
  • Created almost 8 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐ŸŒŠ - Jelly is a library for animated, non-interactive & interactive viewcontroller transitions and presentations with the focus on a simple and yet flexible API.

Jelly-Animators: Elegant Viewcontroller Animations in Swift

current version current version twitter handle Swift 4.2 compatible platform SPM-Compatible 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'

or use SPM

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.

More Repositories

1

Gang-of-Four-and-Solid-Principles-in-Swift

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ - My personal Repo to learn all 23 Gang of Four patterns and all SOLID Principles using Swift and Playgrounds
Swift
135
star
2

Learn-and-Master-RxSwift

๐Ÿค  - RxSwift for Dummies
Swift
106
star
3

Terminal-Cheatsheet

โŒจ๏ธ - A cheatsheet to the Mac OS Terminal Application including commands, helpful hints and a lot of other things.
101
star
4

Learn-And-Master-IGListKit

๐Ÿค˜- IGListKit for Dummies
Swift
33
star
5

Endless

๐Ÿ›ฃ A lightweight endless pageControl based on CAShapeLayers and UICollectionView
Swift
23
star
6

Viper-Xcode-Template

๐Ÿ - Extended VIPER Xcode Template
Swift
19
star
7

Cocoapods-Cheatsheet

๐Ÿซ Useful commands etc. for Cocoapods
15
star
8

VIPER-SwiftUI-Xcode-Template

๐ŸVIPER + SwiftUI (Xcode Template)
Swift
12
star
9

Homebrew-Cheatsheet

๐Ÿ‘จโ€๐Ÿ”ฌCheatsheet for Homebrew
6
star
10

developer.sebastianboldt.com

๐Ÿค– This is the repository for my new website written in Swift
Swift
5
star
11

Soundrocket

๐ŸŽง Soundrocket is an unofficial SoundCloudยฎ client for iOS. It is the first app that was written completely by myself and made it into the appstore in 2015
Objective-C
4
star
12

Algorithms-and-Datastructures

๐Ÿ‘จ๐Ÿปโ€๐Ÿซ My personal repository to internalize the behaviour and mechanisms of algorithms and data structures using Swift Playgrounds
Swift
3
star
13

Git-Cheatsheet

๐ŸฑA Cheatsheet for Git
2
star
14

ConnectMe

Appstore Connect Helper Application
1
star
15

TCA-SwiftUI-Xcode-Templates

Basic Template for TCA and SwiftUI
Shell
1
star