TGLStackedViewController
使用 UICollectionView 实现手势的基础排序功能,受 Passbook 和 Reminders 应用程序启发。
2.2 版本新功能
- 在 iOS 11.0 上重新实现使用 UIKit 拖放实现的项重新排序
2.0 版本新功能
- 使用 iOS 9 集合视图重新排序 API 而不是自己的实现,因此最小部署目标为 iOS 9.0
- 未暴露的项默认固定在底部
- 除了点击,现在还可以交互式地折叠暴露的项
- 在固定(默认)时,向下拖动项以切换回堆叠布局
- 仅将卡片推到一边时,请使用捏合手势
- 改进的示例项目,包含许多可交互调整的设置
入门
请查看示例项目 TGLStackedViewExample.xcodeproj
。您可以将示例类 TGLViewController
作为您自己实现的起点。
使用方法
通过 CocoaPods
- 将
pod 'TGLStackedViewController', '~> 2.2'
添加到项目的Podfile
通过 Carthage
- 在项目的
Cartfile
中添加github "gleue/TGLStackedViewController", ~> 2.2
或者“经典”方式
- 将
TGLStackedViewController
文件夹中的文件添加到项目中
然后在项目中
- 创建一个从
TGLStackedViewController
派生的子类 - 在子类中实现
UICollectionViewDataSource
协议- 目前只支持1个区 因此您的
-numberOfSectionsInCollectionView
实现必须返回1
。《TGLStackedViewController》提供了一个适合您的实现,无需覆盖。 - 常规实现
-numberOfSectionsInCollectionView:
和-collectionView:cellForItemAtIndexPath
方法。 - 2.0版本新增:《TGLStackedViewController》方法
-collectionView:canMoveItemAtIndexPath:
实现,在允许重新排序之前检查层叠布局和至少2个项目的最小数量。确保在您的实现中调用super
并尊重其结果。 - 2.0版本新增:实现方法
-collectionView:moveItemAtIndexPath:toIndexPath:
以在项目重新排序后更新数据模型。
- 目前只支持1个区 因此您的
- 在子类中实现
UICollectionViewDelegate
协议TGLStackedViewController
已在内部实现方法-collectionView:shouldHighlightItemAtIndexPath:
、-collectionView:didDeselectItemAtIndexPath
和-collectionView:didSelectItemAtIndexPath:
,所以确保在您的实现中调用super
。- 方法
-collectionView:targetContentOffsetForProposedContentOffset:
对于在展开和层叠布局之间切换至关重要,所以确保在您的实现中调用super
。
- 在故事板中将
UICollectionViewController
放置在您的类中并设置为其派生类- 确保正确设置集合视图的
delegate
和dataSource
连接
- 确保正确设置集合视图的
- 2.0版本新增:《TGLStackedViewController》不再在内部创建布局对象。
- 在界面构造器中的检查器中将集合视图控制器的内容设置为
TGLStackedLayout
或您自己的TGLStackedLayout
子类。 - 在代码中创建一个
TGLStackedViewController
时,必须在显示视图控制器之前设置集合视图的布局。
- 在界面构造器中的检查器中将集合视图控制器的内容设置为
要求
- ARC
- iOS >= 9.0
- Xcode 9.0
致谢
- 在1.x版本中使用LXReorderableCollectionViewFlowLayout进行重排
- 原始的Pierre Dulac编写的Podspec
- 由Hannes Oud提供了对Carthage的支持
授权
TGLStackedViewController遵循MIT授权协议(MIT)
版权所有(c)2014-2019 Tim Gleue (http://gleue-interactive.com)
特此授予任何获得本软件及其相关文档副本(“软件”)的人自由使用该软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或销售软件副本的权利,并允许向提供软件的人授予此类权利,但需遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和不侵犯专利权的保证。在任何情况下,作者或版权所有者不应对因使用或无法使用本软件而产生的任何索赔、损害或其它责任负责,无论是由合同、侵权行为还是其他原因引起的,即使被告知该软件可能或会导致此类损害。