Fluidable 1.0.0

Fluidable 1.0.0

Gumob DeveloperKojiro Futamura 维护。



Fluidable 1.0.0

  • 作者
  • gumob

Carthage compatible Version Platform Build Status codecov Reviewed by Hound Language Packagist

Fluidable

一个 Swift 库,允许您创建符合 Fluid 接口的自定义过渡。

特性 & 待办事项

  • 支持 UINavigationControllerDelegateUIViewControllerTransitioningDelegate
  • UIScrollViewUITableViewUICollectionView 交互的交互式和可中断的过渡
  • 可由代表方法定义的视图控制器动画(支持 UIViewPropertyAnimatorCore 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 自定义过渡

  1. Fluidable 框架导入到您的项目文件中
import UIKit
import Fluidable
  1. AppDelegate 中初始化 Fluidable 框架
class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      FluidableInit()
      return true
  }
}
  1. 视图控制器中遵循 Fluidable 协议
class RootViewController: UICollectionViewController, Fluidable {
  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.fluidDelegate = self
  }
}
  1. 遵守在 视图控制器中的 FluidTransitionSourceConfigurationDelegateFluidTransitionSourceActionDelegate 协议
extension RootViewController: FluidTransitionSourceConfigurationDelegate {
  /* Implement delegate methods */
}
extension RootViewController: FluidTransitionSourceActionDelegate {
  /* Implement delegate methods */
}
  1. 遵守在 目标 视图控制器中的 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
  }
}
  1. 遵守在 目标 视图控制器中的 FluidTransitionDestinationConfigurationDelegateFluidTransitionDestinationActionDelegate 协议
extension TransitionScrollViewController: FluidTransitionDestinationConfigurationDelegate {
  /* Implement delegate methods */
}
extension TransitionScrollViewController: FluidTransitionDestinationActionDelegate {
  /* Implement delegate methods */
}

使用 UINavigationControllerDelegate 自定义过渡

  1. Fluidable 框架导入项目文件
import UIKit
import Fluidable
  1. AppDelegate 中初始化 Fluidable 框架
class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      FluidableInit()
      return true
  }
}
  1. 视图控制器中遵循 Fluidable 协议
class RootViewController: UICollectionViewController, Fluidable {
  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.fluidDelegate = self
  }
}
  1. 遵守在 视图控制器中的 FluidTransitionSourceConfigurationDelegateFluidTransitionSourceActionDelegate 协议
extension RootViewController: FluidTransitionSourceConfigurationDelegate {
  /* Implement delegate methods */
}
extension RootViewController: FluidTransitionSourceActionDelegate {
  /* Implement delegate methods */
}
  1. 遵守在 目标 视图控制器中的 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
  }
}
  1. 遵守在 目标 视图控制器中的 FluidTransitionDestinationConfigurationDelegateFluidTransitionDestinationActionDelegate 协议
extension TransitionScrollViewController: FluidTransitionDestinationConfigurationDelegate {
  /* Implement delegate methods */
}
extension TransitionScrollViewController: FluidTransitionDestinationActionDelegate {
  /* Implement delegate methods */
}

可调整大小的抽屉

FluidResizableTransitionDelegate 仅适用于底部抽屉。

  1. 遵守在 目标 视图控制器中的 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 下载。