描述
Family是一个子视图控制器框架,它使得设置父控制器变得轻松如甜品。它拥有简单且功能强大的公共API,您可以在不失去可维护性的情况下构建复杂的布局,从而让您专注于重要的事情:使您的应用程序更加吸引人,使您的业务逻辑更加耀眼。
这个框架是为了更容易构建和维护父控制器(也称为流程控制器)而构建的。使用子视图控制器可以使您的代码更加模块化、灵活和可测试。它解决了vanilla方法的一个最大的缺点:在保持缓存清空的情况下,如何得到一个连续滚动的体验?
这就是Family框架发挥作用的地方。借助其布局算法,所有常规和滚动视图都按照您添加到体系结构的线性垂直顺序堆叠。为了实现连续滚动的视图,子滚动视图不再自己滚动,而是由父滚动视图传递给它新的内容偏移量,框架为您处理这一点。该框架还会动态修改视图的框架,将高度约束到窗口上。
Family背后的故事
如果您对Family背后的起源感兴趣,可以阅读这篇Medium文章。
特性
-
🍩 动画支持。 - 🤳🏻支持多个滚动视图的连续滚动。
-
📏 子视图控制器之间的边距。 -
🌀 表格视图和集合视图出队。 -
🍭 支持视图之间的自定义间距。 -
📱 iOS 支持。 -
💻 macOS 支持。 -
📺 tvOS 支持。
支持项目
如果您想支持此框架的开发,您可以成为 赞助商。
使用
新的公共 API
body(withDuration: 0) {
add(detailViewController)
.background(.view(backgroundView))
.padding(.init(top: 20, left: 20, bottom: 20, right: 20))
.margin(.init(top: 20, left: 0, bottom: 20, right: 0))
}
添加一个普通子视图控制器
let familyController = FamilyViewController()
let viewController = UIViewController()
familyController.addChild(viewController)
添加被高度约束的子视图控制器
let familyController = FamilyViewController()
let viewController = UIViewController()
familyController.addChild(viewController, height: 175)
添加一个在控制器上有自定义视图的子视图控制器
let familyController = FamilyViewController()
let customController = CustomViewController()
// This will add the scroll view of the custom controller
// instead of the controllers view.
familyController.addChild(customController, view: { $0.scrollView })
移动视图控制器
familyController.moveChild(customController, to: 1)
执行批量更新(当更新多个视图控制器时推荐使用 performBatchUpdates)
familyController.performBatchUpdates({ controller in
controller.addChild(controller1)
controller.addChild(controller2)
controller.moveChild(controller2, to: 0)
controller3.removeFromParent()
})
添加动画
在添加动画时,请注意您必须为其提供一个密钥。
let basicAnimation = CABasicAnimation()
basicAnimation.duration = 0.5
controller.view.layer.add(springAnimation, forKey: "Basic Animations")
let springAnimation = CASpringAnimation()
springAnimation.damping = 0.6
springAnimation.initialVelocity = 0.6
springAnimation.mass = 0.4
springAnimation.duration = 0.6
springAnimation.isRemovedOnCompletion = false
controller.view.layer.add(springAnimation, forKey: "Spring Animations")
安装
Family 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中
pod 'Family'
然后运行
pod install
Family 也可通过 Carthage 获取。要安装,只需将其写入您的 Cartfile 中
github "zenangst/Family"
然后运行
carthage install
完成后,将构建的框架(可在 Carthage/Build
文件夹中找到)安装到您的 Xcode 项目中。
Family 还可手动安装。只需下载并将 Sources
文件夹拖放到您的项目中。
作者
Christoffer Winterkvist, [email protected]
贡献
我们非常希望您为 Family 做出贡献,请查看 CONTRIBUTING 文件了解详细信息。
致谢
- hyperoslo的Spots采用了类似的实现方式来渲染其组件。
- Ole Begemanns 开发的 OLEContainerScrollView 是
SpotsScrollView
的基础,我们向您致敬。参考:http://oleb.net/blog/2014/05/scrollviews-inside-scrollviews/
许可协议
Family 采用 MIT 许可协议。更多详细信息请参阅 LICENSE 文件。