Fluidable
一个 Swift 库,允许您创建符合 Fluid 接口的自定义过渡。
特性 & 待办事项
- 支持
UINavigationControllerDelegate
和UIViewControllerTransitioningDelegate
- 与
UIScrollView
、UITableView
和UICollectionView
交互的交互式和可中断的过渡 - 可由代表方法定义的视图控制器动画(支持
UIViewPropertyAnimator
和Core Animation
) - 使用代表方法监控过渡状态和进度
- 可自定义的展示样式(流体、抽屉和滑动)
- 可调整大小的抽屉
- 可自定义样式(圆角、阴影和背景效果)
- 可自定义动画缓动和持续时间
- 类似于 Apple Maps 的视图交互
- 使用用户定义插件的自定义过渡
- 支持 iOS 10
流体 | 抽屉 | 滑动 |
---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
要求
- iOS 11.0 或更高版本
- Swift 4.2
安装
Carthage
将以下内容添加到您的 Cartfile
中,并按照 这些说明 操作。
github "gumob/Fluidable"
CocoaPods
要将 Fluidable 集成到您的项目中,请将以下内容添加到您的 Podfile
。
platform :ios, '10.0'
use_frameworks!
pod 'Fluidable'
示例应用
仓库在 示例 目录下包含示例源代码。应用结构简单,但项目包含多个 UI 模式示例,以展示库的功能。您可以通过从 Xcode 的方案中选择 FluidableExample
来构建示例应用。
使用方法
完整文档可在 https://gumob.github.io/Fluidable/ 找到。
您可以通过使用 "IMPORTANT: 🌊
" 来搜索 示例 源代码中的更具体实现。
UIViewControllerTransitioningDelegate
自定义过渡
使用 - 将
Fluidable
框架导入到您的项目文件中
import UIKit
import Fluidable
- 在
AppDelegate
中初始化Fluidable
框架
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FluidableInit()
return true
}
}
- 在 源 视图控制器中遵循
Fluidable
协议
class RootViewController: UICollectionViewController, Fluidable {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.fluidDelegate = self
}
}
- 遵守在 源 视图控制器中的
FluidTransitionSourceConfigurationDelegate
和FluidTransitionSourceActionDelegate
协议
extension RootViewController: FluidTransitionSourceConfigurationDelegate {
/* Implement delegate methods */
}
extension RootViewController: FluidTransitionSourceActionDelegate {
/* Implement delegate methods */
}
- 遵守在 目标 视图控制器中的
Fluidable
协议
class TransitionScrollViewController: TransitionBaseViewController, Fluidable {
var fluidableTransitionDelegate: FluidViewControllerTransitioningDelegate = FluidViewControllerTransitioningDelegate()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.transitioningDelegate = self.fluidableTransitionDelegate
self.fluidDelegate = self
}
}
- 遵守在 目标 视图控制器中的
FluidTransitionDestinationConfigurationDelegate
和FluidTransitionDestinationActionDelegate
协议
extension TransitionScrollViewController: FluidTransitionDestinationConfigurationDelegate {
/* Implement delegate methods */
}
extension TransitionScrollViewController: FluidTransitionDestinationActionDelegate {
/* Implement delegate methods */
}
UINavigationControllerDelegate
自定义过渡
使用 - 将
Fluidable
框架导入项目文件
import UIKit
import Fluidable
- 在
AppDelegate
中初始化Fluidable
框架
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FluidableInit()
return true
}
}
- 在 源 视图控制器中遵循
Fluidable
协议
class RootViewController: UICollectionViewController, Fluidable {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.fluidDelegate = self
}
}
- 遵守在 源 视图控制器中的
FluidTransitionSourceConfigurationDelegate
和FluidTransitionSourceActionDelegate
协议
extension RootViewController: FluidTransitionSourceConfigurationDelegate {
/* Implement delegate methods */
}
extension RootViewController: FluidTransitionSourceActionDelegate {
/* Implement delegate methods */
}
- 遵守在 目标 视图控制器中的
Fluidable
协议
class TransitionScrollViewController: TransitionBaseViewController, Fluidable {
var fluidableTransitionDelegate: FluidViewControllerTransitioningDelegate = FluidViewControllerTransitioningDelegate()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.transitioningDelegate = self.fluidableTransitionDelegate
self.fluidDelegate = self
}
}
- 遵守在 目标 视图控制器中的
FluidTransitionDestinationConfigurationDelegate
和FluidTransitionDestinationActionDelegate
协议
extension TransitionScrollViewController: FluidTransitionDestinationConfigurationDelegate {
/* Implement delegate methods */
}
extension TransitionScrollViewController: FluidTransitionDestinationActionDelegate {
/* Implement delegate methods */
}
可调整大小的抽屉
FluidResizableTransitionDelegate
仅适用于底部抽屉。
- 遵守在 目标 视图控制器中的
FluidResizableTransitionDelegate
协议
class TransitionScrollViewController: TransitionBaseViewController, Fluidable, FluidResizable {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.transitioningDelegate = self.fluidableTransitionDelegate
self.fluidDelegate = self
self.fluidResizableDelegate = self
}
}
extension TransitionScrollViewController: FluidResizableTransitionDelegate {
func transitionShouldPerformResizing() -> Bool { return true }
func transitionMinimumMarginForResizing() -> CGFloat { return 64 }
func transitionSnapPositionsForResizing() -> [CGFloat]? { return [0.0, 0.5, 1.0] }
func transitionInteractiveResizeDidProgress(state: FluidProgressState, position: CGFloat, info: FluidGestureInfo) {
}
}
版权
Fluidable 是在 MIT 许可下发布的,这意味着您可以修改它、重新分发它或按您喜欢的方式使用它。
示例项目中嵌入的所有图像均从 Pexels 下载。