[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6988":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":15,"starSnapshotCount":15,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},6988,"BubbleTransition","andreamazz\u002FBubbleTransition","andreamazz","A custom modal transition that presents and dismiss a controller with an expanding bubble effect.",null,"Swift",3306,248,54,3,0,59.19,"MIT License",false,"master",true,[],"2026-06-12 04:00:31","\u003Cp align=\"center\">\n  \u003Cimg width=\"420\" height=\"240\" src=\"assets\u002Flogo.png\"\u002F>\n\u003C\u002Fp>\n\n[![CocoaPods](https:\u002F\u002Fcocoapod-badges.herokuapp.com\u002Fv\u002FBubbleTransition\u002Fbadge.svg)](http:\u002F\u002Fcocoapods.org\u002F?q=bubbletransition)\n[![Carthage compatible](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCarthage-compatible-4BC51D.svg?style=flat)](https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage)\n![Swift 5.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fswift-5.0-orange.svg)\n[![codebeat badge](https:\u002F\u002Fcodebeat.co\u002Fbadges\u002F45635139-6294-4ac8-9f39-6f1d3b18dd23)](https:\u002F\u002Fcodebeat.co\u002Fprojects\u002Fgithub-com-andreamazz-bubbletransition)\n\nA custom modal transition that presents and dismiss a controller inside an expanding and shrinking _bubble_.\n\n\u003Cp align=\"center\">\n  \u003Ca href='https:\u002F\u002Fappetize.io\u002Fapp\u002Ftck0418dftyfjxkqrfu34rwt44' alt='Live demo'>\n    \u003Cimg width=\"150\" height=\"75\" src=\"assets\u002Fdemo-button.png\"\u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n# Screenshot\n![BubbleTransition](https:\u002F\u002Fraw.githubusercontent.com\u002Fandreamazz\u002FBubbleTransition\u002Fmaster\u002Fassets\u002Fscreenshot.gif)\n\n# Usage\nInstall through [CocoaPods](http:\u002F\u002Fcocoapods.org):\n```\npod 'BubbleTransition', '~> 3.2.0'\n\nuse_frameworks!\n```\nInstall through [Carthage](https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage):\n```\ngithub \"andreamazz\u002FBubbleTransition\"\n```\n\nInstall through [Swift Package Manager](https:\u002F\u002Fswift.org\u002Fpackage-manager\u002F):\n\nTo integrate using Xcode:  \n\n`File` -> `Swift Packages` -> `Add Package Dependency...`  \n\nEnter package URL: `https:\u002F\u002Fgithub.com\u002Fandreamazz\u002FBubbleTransition`, and select the latest release. \n\n\n# Setup\nHave your view controller conform to `UIViewControllerTransitioningDelegate`. Set the `transitionMode`, the `startingPoint`, the `bubbleColor` and the `duration`.\n```swift\nlet transition = BubbleTransition()\n\npublic override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n  let controller = segue.destination\n  controller.transitioningDelegate = self\n  controller.modalPresentationCapturesStatusBarAppearance = true\n  controller.modalPresentationStyle = .custom\n}\n\n\u002F\u002F MARK: UIViewControllerTransitioningDelegate\n\npublic func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n  transition.transitionMode = .present\n  transition.startingPoint = someButton.center\n  transition.bubbleColor = someButton.backgroundColor!\n  return transition\n}\n\npublic func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n  transition.transitionMode = .dismiss\n  transition.startingPoint = someButton.center\n  transition.bubbleColor = someButton.backgroundColor!\n  return transition\n}\n```\n\nYou can find the Objective-C equivalent [here](https:\u002F\u002Fgist.github.com\u002Fandreamazz\u002F9b0d6c7db065555ec0d7).\n\n# Swipe to dismiss\n\nYou can use an interactive gesture to dismiss the presented controller. To enable this gesture, prepare the interactive transition:\n\n```swift\nlet interactiveTransition = BubbleInteractiveTransition()\n\noverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n  if let controller = segue.destination as? ModalViewController {\n    controller.transitioningDelegate = self\n    controller.modalPresentationStyle = .custom\n    controller.modalPresentationCapturesStatusBarAppearance = true\n    controller.interactiveTransition = interactiveTransition\n    interactiveTransition.attach(to: controller)\n  }\n}\n```\n\nand implement `interactionControllerForDismissal` in your presenting controller:\n\n```swift\nfunc interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {\n  return interactiveTransition\n}\n```\n\nIn the presented controller make sure to call `finish()` on the interactive gesture if you need to quickly dismiss from a button press instead. Check the sample code for more info.  \n\nYou can decide the gesture threshold and the swipe direction:\n```swift\ninteractiveTransition.interactionThreshold = 0.5\ninteractionThreshold.swipeDirection = .up\n```\n\n# Properties\n```swift\nvar startingPoint = CGPointZero\n```\nThe point that originates the bubble.\n\n```swift\nvar duration = 0.5\n```\nThe transition duration.\n\n```swift\nvar transitionMode: BubbleTranisionMode = .present\n```\nThe transition direction. Either `.present`, `.dismiss` or `.pop`.\n\n```swift\nvar bubbleColor: UIColor = .white\n```\nThe color of the bubble. Make sure that it matches the destination controller's background color.  \n\nCheckout the sample project for the full implementation.\n\n# Author\n[Andrea Mazzini](https:\u002F\u002Ftwitter.com\u002Ftheandreamazz). I'm available for freelance work, feel free to contact me.\n\nWant to support the development of [these free libraries](https:\u002F\u002Fcocoapods.org\u002Fowners\u002F734)? Buy me a coffee ☕️ via [Paypal](https:\u002F\u002Fwww.paypal.me\u002Fandreamazzini).  \n\n# Contributors\nThanks to [everyone](https:\u002F\u002Fgithub.com\u002Fandreamazz\u002FBubbleTransition\u002Fgraphs\u002Fcontributors) kind enough to submit a pull request.\n\n# MIT License\n\n\tCopyright (c) 2018-2020 Andrea Mazzini. All rights reserved.\n\n\tPermission is hereby granted, free of charge, to any person obtaining a\n\tcopy of this software and associated documentation files (the \"Software\"),\n\tto deal in the Software without restriction, including\n\twithout limitation the rights to use, copy, modify, merge, publish,\n\tdistribute, sublicense, and\u002For sell copies of the Software, and to\n\tpermit persons to whom the Software is furnished to do so, subject to\n\tthe following conditions:\n\n\tThe above copyright notice and this permission notice shall be included\n\tin all copies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\tOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\tMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\tIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n\tCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\tTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n\tSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","BubbleTransition 是一个自定义模态转场动画库，用于以气泡膨胀和收缩的效果展示和关闭视图控制器。它使用 Swift 语言开发，支持通过 CocoaPods、Carthage 和 Swift Package Manager 进行集成。核心功能包括设置过渡模式、起始点、气泡颜色及动画时长等参数来自定义动画效果，并且支持通过手势交互来实现滑动关闭视图控制器的功能。此项目适用于需要为 iOS 应用添加独特视觉体验的开发者，在用户界面设计中引入创意动画，增强用户体验。",2,"2026-06-11 03:10:02","top_language"]