{"id":21376487,"url":"https://github.com/fluidgroup/rideau","last_synced_at":"2025-12-11T23:01:39.299Z","repository":{"id":33537417,"uuid":"150101252","full_name":"FluidGroup/Rideau","owner":"FluidGroup","description":"🎪 Rideau is a drawer UI similar to what Apple's apps use. (e.g Maps, Shortcuts) Supports multiple snap points","archived":false,"fork":false,"pushed_at":"2024-07-25T08:53:02.000Z","size":26068,"stargazers_count":509,"open_issues_count":6,"forks_count":26,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-03-28T13:08:19.620Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/FluidGroup.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["muukii"],"patreon":"muukii","ko_fi":"muukii","open_collective":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2018-09-24T12:46:54.000Z","updated_at":"2025-01-14T09:30:45.000Z","dependencies_parsed_at":"2024-05-07T12:44:25.554Z","dependency_job_id":"69131a7c-195f-4a25-825b-39a1b9f909f8","html_url":"https://github.com/FluidGroup/Rideau","commit_stats":{"total_commits":239,"total_committers":6,"mean_commits":"39.833333333333336","dds":"0.046025104602510414","last_synced_commit":"9476ddf94fabb4903fdd823c7a1c249eb19964c1"},"previous_names":["muukii/rideau"],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2FRideau","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2FRideau/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2FRideau/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FluidGroup%2FRideau/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FluidGroup","download_url":"https://codeload.github.com/FluidGroup/Rideau/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247190252,"owners_count":20898702,"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":[],"created_at":"2024-11-22T09:15:54.660Z","updated_at":"2025-12-11T23:01:38.794Z","avatar_url":"https://github.com/FluidGroup.png","language":"Swift","funding_links":["https://github.com/sponsors/muukii","https://patreon.com/muukii","https://ko-fi.com/muukii"],"categories":[],"sub_categories":[],"readme":"# 🎪 Rideau\n\nRideau is a drawer UI similar to what Apple's apps use. (e.g Maps, Shortcuts)\n\n\u003e 🚀 Rideau is in release candidate!\n\n![](./sample1.gif)\n![](./sample2.gif)\n\n## Overview\n\n- 💎 Supports multiple snap points (e.g. most hidden, half visible, full visible, and we can add more snap points.)\n- 💎 Supports Animations alongside moving (e.g. dimming background color)\n- 💎 Supports handling scrolling of scrollview inside RideauView\n- 💎 Supports resizing based on intrinsic content size of view that RideauView has\n- ✅ Interactive Animations come from UIViewPropertyAnimator, with this it's actual interruptible animation and no glitches. (it can't get from UIView.animate)\n\nRideauView allows for flexible snap points.\n`Snap points` pertains to specified offsets where the draggable view \"snaps to\" when the dragging has ended.\nThere are usually 2 or 3 snap points.\n\n---\n\nObjects we will commonly use:\n\n- RideauView\n- RideauViewController\n- RideauSnapPoint\n\n`RideauView` is the core object in this library.\nWe typically add our own view to RideauView.\n\n`RideauViewController` contains a `RideauView`.\nIt allows us to present the RideauView as modal dialog.\n\n`RideauSnapPoint` defines where the content view stops.\n\n## 🔶 Requirements\n\niOS 10.0+\nXcode 10.1+\nSwift 4.2+\n\n## 📱 Features\n\n- [x] Multiple snap-point\n- [x] Smooth integration with dragging and UIScrollView's scrolling.\n- [x] Tracking UIScrollView automatically\n- [x] Set UIScrollView to track manually\n- [x] Use UIViewPropertyAnimator between snap-points.\n\n## 👨🏻‍💻 Usage\n\n### Present inline\n\n```swift\nlet rideauView = RideauView(frame: .zero) { (config) in\n  config.snapPoints = [.autoPointsFromBottom, .fraction(0.6), .fraction(1)]\n}\n  \nlet someView = ...\n\nrideauView.containerView.set(bodyView: container.view, options: .strechDependsVisibleArea)\n```\n\n### Present with Modal Presentation\n\n```swift\n\nlet targetViewController: YourViewController = ...\n\nlet controller = RideauViewController(\n  bodyViewController: targetViewController,\n  configuration: {\n    var config = RideauView.Configuration()\n    config.snapPoints = [.autoPointsFromBottom, .fraction(1)]\n    return config\n}(),\n  initialSnapPoint: .autoPointsFromBottom\n)\n\npresent(controller, animated: true, completion: nil)\n```\n\n### Multiple SnapPoints\n\nWe can define snap-point with `RideauSnapPoint`.\n\n```swift\npublic enum RideauSnapPoint : Hashable {\n  \n  case fraction(CGFloat)\n  case pointsFromTop(CGFloat)\n  case pointsFromBottom(CGFloat)\n  case autoPointsFromBottom\n}\n```\n\n```swift\nconfig.snapPoints = [.pointsFromBottom(200), .fraction(0.5), .fraction(0.8), .fraction(1)]\n```\n\n### ⚙️ Details\n\nRideauContainerView has two ways of resizing content view which is added.\n\n* `RideauContainerView.ResizingOption`\n  * noResize\n  * resizeToVisibleArea\n  \n```swift\nfinal class RideauContainerView : UIView {\n  public func set(bodyView: UIView, resizingOption: ResizingOption)\n}\n```\n\n### 🔌 Components\n\nRideau provides the following components that may help us.\n\n#### RideauMaskedCornerRoundedViewController\n\nA Container view controller that implements masked rounded corner interface and has some options.\n\n- [ ] More customizable\n\n```swift\nlet targetViewController: YourViewController = ...\nlet toDisplayViewController = RideauMaskedCornerRoundedViewController(viewController: targetViewController)\n\nlet controller = RideauViewController(\n  bodyViewController: RideauMaskedCornerRoundedViewController(viewController: target),\n  ...\n```\n\n#### RideauMaskedCornerRoundedView\n\n- [ ] More customizable\n\n![](round.png)\n\n#### RideauThumbView\n\n- [ ] More customizable\n\n![](thumb.png)\n\n## Installation\n\n### CocoaPods\n\nRideau is available through [CocoaPods](https://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'Rideau'\n```\n\n### Carthage\n\nFor [Carthage](https://github.com/Carthage/Carthage), add the following to your `Cartfile`:\n\n```ogdl\ngithub \"muukii/Rideau\"\n```\n\n### What's using Rideau\n\n- [Pairs](https://itunes.apple.com/tw/app/id825433065)\n\n## Author\n\n- [Muukii(Hiroshi Kimura)](https://github.com/muukii)\n\n## Contributors\n\n- [John Estropia](https://twitter.com/JohnEstropia)\n\n## SwiftUI Edition\n\nhttps://github.com/nerdsupremacist/Snap\n\n## License\n\nRideau is released under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluidgroup%2Frideau","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffluidgroup%2Frideau","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluidgroup%2Frideau/lists"}