{"id":15027190,"url":"https://github.com/sebastianboldt/jelly","last_synced_at":"2025-12-12T06:12:50.842Z","repository":{"id":13231721,"uuid":"73949747","full_name":"SebastianBoldt/Jelly","owner":"SebastianBoldt","description":"🌊 - Jelly is a library for animated, non-interactive \u0026 interactive viewcontroller  transitions and presentations with the focus on a simple and yet flexible API.","archived":false,"fork":false,"pushed_at":"2022-05-31T15:25:28.000Z","size":55283,"stargazers_count":2458,"open_issues_count":9,"forks_count":123,"subscribers_count":35,"default_branch":"master","last_synced_at":"2025-04-14T04:08:51.374Z","etag":null,"topics":["animations","ios","swift","uikit","uipresentationcontroller","uiviewcontroller","viewcontroller-transition"],"latest_commit_sha":null,"homepage":"http://www.sebastianboldt.com/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SebastianBoldt.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-11-16T18:40:19.000Z","updated_at":"2025-04-11T07:07:06.000Z","dependencies_parsed_at":"2022-11-28T10:39:08.217Z","dependency_job_id":null,"html_url":"https://github.com/SebastianBoldt/Jelly","commit_stats":null,"previous_names":["sebastianboldt/jelly-animators"],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBoldt%2FJelly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBoldt%2FJelly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBoldt%2FJelly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBoldt%2FJelly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SebastianBoldt","download_url":"https://codeload.github.com/SebastianBoldt/Jelly/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248819405,"owners_count":21166477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animations","ios","swift","uikit","uipresentationcontroller","uiviewcontroller","viewcontroller-transition"],"created_at":"2024-09-24T20:05:56.061Z","updated_at":"2025-12-12T06:12:50.800Z","avatar_url":"https://github.com/SebastianBoldt.png","language":"Swift","funding_links":["https://paypal.me/boldtsebastian"],"categories":[],"sub_categories":[],"readme":"![Jelly-Animators: Elegant Viewcontroller Animations in Swift](https://github.com/SebastianBoldt/Jelly/blob/master/Github/Jellyfish.png?raw=true)\n\n\u003ca href=\"https://paypal.me/boldtsebastian\"\u003e\u003cimg src=\"https://img.shields.io/badge/paypal-donate-blue.svg?longCache=true\u0026style=flat-square\" alt=\"current version\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://cocoapods.org/pods/Jelly\"\u003e\u003cimg src=\"https://img.shields.io/badge/version-2.3.0-green.svg?longCache=true\u0026style=flat-square\" alt=\"current version\" /\u003e\u003c/a\u003e\n\u003ca href=\"http://twitter.com/sebastianboldt\"\u003e\u003cimg src=\"https://img.shields.io/badge/twitter-@sebastianboldt-blue.svg?longCache=true\u0026style=flat-square\" alt=\"twitter handle\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://developer.apple.com/swift\"\u003e\u003cimg src=\"https://img.shields.io/badge/swift5.0-compatible-orange.svg?longCache=true\u0026style=flat-square\" alt=\"Swift 4.2 compatible\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://www.apple.com/de/ios/ios-12/\"\u003e\u003cimg src=\"https://img.shields.io/badge/platform-iOS-lightgray.svg?longCache=true\u0026style=flat-square\" alt=\"platform\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://www.swift.org/package-manager/\"\u003e\u003cimg src=\"https://img.shields.io/badge/SPM-compatible-orange.svg?longCache=true\u0026style=flat-square\" alt=\"SPM-Compatible\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/Carthage/Carthage\"\u003e\u003cimg src=\"https://img.shields.io/badge/carthage-compatible-green.svg?longCache=true\u0026style=flat-square\" alt=\"carthage support\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://en.wikipedia.org/wiki/MIT_License\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-lightgray.svg?longCache=true\u0026style=flat-square\" alt=\"license\" /\u003e\u003c/a\u003e\n\nJelly is a library for animated, non-interactive \u0026 interactive viewcontroller \u003cbr/\u003e\ntransitions and presentations with the focus on a simple and yet flexible API. \n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0240.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0242.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0244.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0246.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0248.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0250.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left; margin-right: 32px\"\u003e\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0252.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0254.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n  \nWith a few lines of source code, interactive UIViewController transitions \u003cbr/\u003e\nand custom resizable UIViewController presentations can be created, \u003cbr/\u003e\nwithout the use of the cumbersome UIKit Transitioning API. \n\n```swift\n\nvar slidePresentation = SlidePresentation(direction: .left)\nlet animator = Animator(presentation: slidePresentation)\nanimator.prepare(viewController: viewController)\npresent(viewController, animated: true, completion: nil)\n```\n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/how%20to.png?raw=true\" width=\"400\"\u003e\n\n1. Create a `Presentation` Object \n2. Configure an  `Animator` with the *Presentation*\n3. Call the `prepare` Function\n4. Use the native `UIViewController` presentation function.\n\n```swift\nclass ViewController : UIViewController {\n    var animator: Jelly.Animator?\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        let viewController = YourViewController()\n        let presentation = SlidePresentation(direction: .left)\n        animator = Animator(presentation:presentation)\n        animator?.prepare(presentedViewController: viewController)\n        present(viewController, animated: true, completion: nil)\n    }\n}\n```\n\n***DO NOT FORGET TO KEEP A STRONG 💪 REFERENCE***\n\nBecause the `transitioningDelegate` of a `UIViewController` is weak, you need to\nhold a strong reference to the `Animator` inside the `UIViewController` you are presenting from or \nthe central object that maintains your presentations.\n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/interactive-transitions.png?raw=true\" width=\"400\"\u003e\n\nInteractive transitions can be activated for the *slide* and the *cover* transitions. \nIf the transitions are to be interactive, only an `InteractionConfiguration` object has to be passed to the presentation. \n\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0244.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0246.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0248.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0250.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left; margin-right: 32px\"\u003e\n\nHere 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. \nThe second parameter is the actual type of interaction. Jelly offers the `.edge` and the `.canvas` type. \nIn an `.edge` transition, the user must execute the gesture from the edge of the screen. \nWhen using the `.canvas` type, gesture recognizers are configured so that direct interaction with the presenting and presented view leads to the transition.\nThe last parameter is called `mode`. Using the mode you can limit the interaction to presentation or dismiss interaction (default = `[.present,.dismiss]`).\n\n```swift\nlet viewController = YourViewController()\nlet interaction = InteractionConfiguration(presentingViewController: self, completionThreshold: 0.5, dragMode: .edge, mode: .dismiss)\nlet presentation = SlidePresentation(direction: .right, interactionConfiguration: interaction)\nlet animator = Animator(presentation: presentation)\nanimator.prepare(presentedViewController: viewController)\n\n```\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/update.png?raw=true\" width=\"400\"\u003e\n\nJelly 2.0 also provides a new feature called *LIVE UPDATE*. \nUsing 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.\n\n  \u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0252.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/IMG_0254.TRIM.gif?raw=true\" width=\"80\" style=\"display: block;\n  float: left\"\u003e\n\nThese are the new live update functions provided by the Animator. \n\n* `updateAlignment(alignment: PresentationAlignment, duration: Duration)` - Cover \u0026 Fade\n* `updateVerticalAlignment(alignment: VerticalAlignment, duration: Duration)` - Cover \u0026 Fade\n* `updateHorizontalAlignment(alignment: HorizontalAlignment, duration: Duration)` - Cover \u0026 Fade\n* `updateSize(presentationSize: PresentationSize, duration: Duration)` - Cover \u0026 Fade\n* `updateWidth(width: Size, duration: Duration)` - Cover, Fade and horizontal Slide\n* `updateHeight(height: Size, duration: Duration)` - Cover, Fade and vertical Slide\n* `updateMarginGuards(marginGuards: UIEdgeInsets, duration: Duration)` - Cover \u0026 Fade\n* `updateCorners(radius: CGFloat, corners: CACornerMask, duration: Duration)` - Cover \u0026 Fade \u0026 Slide\n\nSome of them will throw an exception if used on a not supported presentationType. \u003cbr/\u003e\nFor example: It is currently not possible to update the size on a Slide-Presentation. \n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/customization.png?raw=true\" width=\"400\"\u003e\n\nThe presentation types can be configured with various settings: \n\n* `size`\n* `margin guards`\n* `direction` \n* `horizontal \u0026 vertical alignment` \n* `dimmed and blurred backgroundStyle`\n* `duration`\n* `presentation and dismiss curve`\n* `spring damping \u0026 velocity` \n* `corner specification` \u0026 `corner radius`\n* `completion threshold`\n* `interactive drag mode` (edge or pan) \n* `interaction mode` (present, dismiss)\n* `parallax`  (Just available on slide Presentations)\n\nEach component is explained in more detail in the \u003ca href=\"https://github.com/SebastianBoldt/Jelly/wiki/Customization\n\"\u003eJelly Wiki\u003c/a\u003e.  \n\n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/requirements.png?raw=true\" width=\"400\"\u003e\n\nDeployment target of your App is \u003e= iOS 11.0\n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/installation.png?raw=true\" width=\"400\"\u003e\n\n\nJelly is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'Jelly', '~\u003e 2.2.2'\n```\n\nor use SPM \n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/mentions.png?raw=true\" width=\"400\"\u003e\n\n* Mentioned in \u003ci\u003eiOS Dev Weekly\u003c/i\u003e by \u003ca href=\"https://twitter.com/daveverwer\"\u003e@Dave Verwer\u003c/a\u003e - \u003ca href=\"http://iosdevweekly.com/issues/279\"\u003e Issue NO. 112 \u003c/a\u003e\n\n* Mentioned in \u003ci\u003eThis Week in Swift\u003c/i\u003e by \u003ca href=\"https://twitter.com/NatashaTheRobot\"\u003e@Natasha the Robot\u003c/a\u003e - \u003ca href=\"https://swiftnews.curated.co/issues/112#start\"\u003e Issue No. 279 \u003c/a\u003e\n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/author.png?raw=true\" width=\"400\"\u003e\n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/emoji.png?raw=true\" width=\"200\"\u003e\n\nSebastian Boldt, https://www.sebastianboldt.com \n\nI am a mobile software architect and developer specializing in iOS. \nPassionate about creating awesome user experiences, designing beautiful user interfaces, \nand writing maintainable, structured, and best-practice orientated code. \nContinuously trying to improve skills and learn new technologies.\n\n\u003ca href=\"https://paypal.me/boldtsebastian\"\u003e\u003cimg src=\"https://img.shields.io/badge/paypal-donate-blue.svg?longCache=true\u0026style=flat-square\" alt=\"current version\" /\u003e\u003c/a\u003e\n\n\u003cimg src=\"https://github.com/SebastianBoldt/Jelly/blob/master/Github/license.png?raw=true\" width=\"400\"\u003e\n\nJelly is available under the MIT license. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastianboldt%2Fjelly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebastianboldt%2Fjelly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastianboldt%2Fjelly/lists"}