SweetCurtain 0.9.2

SweetCurtain 0.9.2

Ihor Malovanyi 维护。



  • 作者:
  • Ihor Malovanyi

一个提供 窗帘控制器 的框架。窗帘控制器是一个容器视图控制器,它实现了内容帘幕的接口。

Platform Swift 5.5 MIT

内容

概述

SweetCurtain 框架提供了一个 窗帘控制器。窗帘控制器是一个容器视图控制器,它可以管理内容帘幕接口中的两个子视图控制器。在这种类型的接口中,主要视图控制器(内容)被次级视图控制器(帘幕)覆盖。

在构建您的应用程序用户界面时,窗帘控制器通常是应用程序窗口的根视图控制器,但它也可以嵌入到另一个视图控制器中。窗帘控制器没有自己的显著外观。它的大部分外观由您安装的子视图控制器定义。您可以使用 Interface Builder 或通过 初始化器 programatically 来配置子视图控制器。子视图控制器可以是自定义视图控制器或其他容器视图控制器,例如导航控制器。

注意:您可以将窗帘控制器推送到导航堆栈中。它的子项可以包含在导航控制器或标签栏控制器中。但请记住,窗帘总是覆盖内容。例如,如果内容在导航控制器中嵌入,窗帘也会覆盖导航栏。

在屏幕上显示时,窗帘控制器使用其代理对象来传递窗帘变化的消息。此外,窗帘控制器提供窗帘对象以管理窗帘的属性

特性

  • 以系数为导向的度量。
  • 友好的内容更改机制。
  • 与故事板和代码一起工作。
  • 设置和使用非常简单。
  • 与安全区域兼容。
  • 与滚动视图兼容。
  • 与水平滚动或滑动兼容。
  • 遵循iOS UI组件设计原则。

安装

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它

$ gem install cocoapods

要使用 CocoaPods 将 SweetCurtain 集成到您的 Xcode 项目中,在您的 Podfile 中指定它

platform :ios, '9.0'
use_frameworks!

target '<Your Target Name>' do
  pod 'SweetCurtain'
end

然后,运行以下命令

$ pod install

Carthage

Carthage 是一个去中心化的依赖管理器,它构建您的依赖并提供二进制框架。

您可以使用以下命令使用 Homebrew 安装 Carthage

$ brew update
$ brew install carthage

要使用 Carthage 将 SweetCurtain 集成到您的 Xcode 项目中,在您的 Cartfile 中指定它

git "https://github.com/multimediasuite/SweetCurtain"

运行 carthage update 来构建框架,并将构建的 SweetCurtain.framework 拖到您的 Xcode 项目中。

手动

如果您不希望使用上述任何依赖管理器,您可以手动将 SweetCurtain 集成到您的项目中。

用法与说明

使用Storyboard设置

  1. 创建一个视图控制器,并在 Identity Inspector 中将其类设置为 CurtainController

  1. 创建另外两个您想要的视图控制器。一个将作为内容,另一个将作为 Curtain

  1. 使用 Curtain Connection Segue 将您的 CurtainController 连接到新的视图控制器。

  1. 选择 Content 视图控制器的 Curtain Connection Segue,并在 Identity Inspector 中将其标识符键入为 ContentID

  1. 选择 Curtain 视图控制器的 Curtain Connection Segue,并在 Identity Inspector 中将其标识符键入为 CurtainID

一切就绪!

注意:请务必检查您的转场和转场标识符。这对正确设置流程非常重要。

使用代码设置

  1. 创建两个视图控制器,您可以使用它们作为 ContentCurtain
//Also, you can instantiate your controllers from storyboard if you want it.
let contentViewController = IceCreamDetailViewController()
let curtainViewController = IceCreamListViewController()
  1. 使用上一步骤中创建的两个控制器创建一个 Curtain Controller
let curtainController = CurtainController(content: contentViewController, curtain: curtainViewController)
  1. 在您想要的位置和时间显示 curtainController
show(curtainController, sender: nil)

一切就绪!

CurtainController

窗帘控制器是一个容器视图控制器,实现了内容窗帘接口。您可以使用Storyboard或从代码来创建Curtain Controller。您所有的视图控制器都可以访问到curtainController属性。这是一个计算属性,提供对视图控制器层次结构中最近的Curtain Controller对象的访问。

Curtain Controller对象具有一些属性和功能。

属性 类型 描述
curtainDelegate CurtainDelegate? 您希望接收有关其窗帘的Curtain Controller消息的代理。
curtain Curtain! 提供所有窗帘行为属性的_object。

创建新的Curtain Controller的初始化器

init(content: UIViewController, curtain: UIViewController)

用于将窗帘移动到您想要的位置的功能

func moveCurtain(to position: CurtainHeightState, animated: Bool)

Curtain

CurtainCurtain Controller的对象,提供了一些行为和视图定制的属性。但Curtain不是视图。《Curtain》是一个用协议表示的抽象对象,其中的属性用于Curtain Controller的目的。简单地说,Curtain旨在减少混淆并限制设置在控制器中的职责。

属性 类型 描述
minHeightCoefficient CGFloat 描述窗帘最小允许高度与内容高度的比值的minHeightCoefficient
midHeightCoefficient CGFloat? 描述窗帘中间允许高度与内容高度的比值的中间值midHeightCoefficient
maxHeightCoefficient CGFloat 描述窗帘最大允许高度与内容高度的比值的最大值maxHeightCoefficient
swipeResistance CurtainSwipeResistance 窗帘的滑动阻力swipeResistance
movingDuration TimeInterval 达到最近点的秒数
topBounce Bool 控制窗帘是否弹回顶部的布尔值topBounce
bottomBounce Bool 控制窗帘是否弹回底部的布尔值bottomBounce
showsHandleIndicator Bool 布尔值,控制窗帘是否显示顶部手持指示器
handleIndicatorColor UIColor 窗帘手持指示器的颜色
heightCoefficient CGFloat 当前只读值,描述窗帘实际高度与内容高度的比值heightCoefficient
actualHeight CGFloat 当前只读值,描述窗帘的实际高度actualHeight

注意heightCoefficient是描述窗帘位置的绝对值的属性。值为0表示如果约束没有干扰,actualHeight也可能为0。值为1表示actualHeightsafeAreaInsets.bottom和safe area高度的总和相同。请参阅下面的图片以更好地理解。

消除命令代理

消除命令代理是允许接收来自消除命令控制器的消息的协议。消除命令代理提供了一组功能。

通知代理当消除命令切换其高度状态时

func curtain(_ curtain: Curtain, didChange heightState: CurtainHeightState)

通知代理当消除命令即将开始拖动时

func curtainWillBeginDragging(_ curtain: Curtain)

通知代理当消除命令中的拖动结束

func curtainDidEndDragging(_ curtain: Curtain)

通知代理当用户拖动消除命令时

func curtainDidDrag(_ curtain: Curtain)

消除命令高度状态

消除命令高度状态是消除命令高度状态的一个枚举器。

情况 描述
最小 定义的最小高度状态。
中间 定义的中间高度状态。
最大 定义的最大高度状态。
隐藏 隐藏状态。

消除命令滑动阻力

消除命令滑动阻力是消除命令可用的预定义(或自定义)速度滑动阻力枚举器。

情况 描述
任何 无阻力。速度值为0。
低阻力。速度值为300。
正常 正常阻力。速度值为600。
高阻力。速度值为900。
自定义(速度: CGFloat) 自定义阻力。速度值为您设置的值。

UIViewController扩展

SweetCurtain框架中有一个公共的UIViewController扩展。

该扩展提供了curtainController属性,它是视图控制器层次结构中距离最近的消除命令控制器。

注意:您可以从任何消除命令内容视图控制器中找到CurtainController。例如,如果您的消除命令是UINavigationController并且您需要找到其顶部视图控制器的消除命令控制器,这将是很有用的。

扩展还提供了 func allowScrollViewInCurtain() 函数,允许层次结构中顶部滚动视图在帘幕滚动时同时进行滚动。

注意:您的 帘幕 视控制器可能包含 UIScrollView 或其任何子类。但默认情况下,它不会影响帘幕的滚动。如果您想启用层次结构中 最顶部滚动视图的并行滚动,请在你视图控制器中调用 func allowScrollViewInCurtain()

注意:函数 func allowScrollViewInCurtain() 在应用新观察之前重置了帘幕之前旧的滚动视图观察器。使用此函数时要格外小心。例如,如果您需要将导航控制器用作 帘幕,则建议在其视图控制器的 func viewDidAppear(animated: Bool) 函数中调用此函数。

待办事项

  • 在控制器中测试手势。
  • 编写单元测试。
  • 更新 iPad 和大手机的横幅屏幕。
  • 为不正确使用编写日志消息。
  • 更新动画参数以提高平滑性。
  • 修复水平滚动视图工作。
  • 添加描述如何正确使用 SweetCurtain 的视频。
  • 添加 Swift 依赖性安装方式。

致谢

许可

SweetCurtain 采用 MIT 许可发布。有关详细信息,请参阅 LICENSE 文件。