Alphabet Slider
提供了一种增量滑块,允许用户从您选择的任何任意值中选择--字母、数字、数值或其他任何值。将其连接到UICollectionView或UITableView,用作快速滚动到各个节区的索引。当用户在表格或集合中滚动时,您可以使用代理方法更新此滑块值,这是一种显示用户对表格或集合整体进度的不错的方式。
为何要使用这个?
- 您希望加载自己的任意标签的增量滑块
- 您需要UICollectionView的索引
- 除了UITableView提供的常规索引外,您还需要UITableView的索引
- 您需要UIScrollView的索引
如何安装这个?
通过CocoaPods安装: pod 'AlphabetSlider' 确保您的Podfile顶部已经声明了
!use_frameworks
通过复制粘贴安装: 复制AlphabetSlider文件夹内部的所有文件到您的项目中;请参考示例项目。您可能需要将 AlphabetSlider
添加到您项目中的嵌入的二进制文件。
无论您选择哪种安装方法,您可能都需要构建一次项目,以便Xcode能够识别新的库。
您可以用它来做些什么?
- 通过界面构建器设置自己的字体、颜色和偏移量
- 通过
alphabet
属性设置自己的任意标签,该属性接受一个字符串数组。
您会如何实现这个功能?
通过一个实际例子来解释
git pull
此项目- 打开根目录中的
xcworkspace
,其中包含AlphabetSlider项目和示例项目。 - 构建AlphabetSliderExample项目
通过说明来解释
- 在故事板中,从一个UIView拖拽出来并将其放置在视图控制器内部某个位置。
- 将此视图的类设置为从模块
AlphabetSlider
中的AlphabetSlider
。 - 将IBoutlet拖拽到视图控制器的代码中
- 在视图控制器的
viewDidLoad
方法中,将outlet的alphabet
属性设置为任何您选择的字符串数组。 - 在
viewDidLoad
方法中,调用outlet的addTarget
方法将自定义函数连接到ValueChanged
事件。
您会如何使用它作为UICollectionView、UITableView或UIScrollView的索引视图?
查看示例项目中的实现,其实现尽可能简单。
本质上,您希望在索引视图上发生以下两件事
- 当索引视图被触摸或滚动时,滚动收藏夹视图。
- 当收藏夹视图滚动时,更新索引视图。
这是通过使用collectionView(willDisplayCell:)
和your_slider.addTarget(forControlEvents:)
来实现的。
在理想的世界里,这应该足够了,但不幸的是,由于它们控制相同的可滚动区域,滚动视图和索引必须共享状态才能一起工作。这将在下一节中解释。
避免事件冲突
GitHub上很少见到UIScrollView索引视图的很好的原因:索引和滚动视图需要共同工作并共享状态,因为它们控制的是同一个可滚动区域。
该解决方案在索引视图中包含两个属性:`userIsUsing`和`scrollViewIsUsing`。这两个属性组合在一起作为关注属性,它会告诉索引视图用户是否最后触摸了滚动视图或索引视图,如果没有焦点它将停止发送事件。
另一面是,当用户正在使用索引视图时,滚动视图需要停止向索引视图发送事件。
以下是从示例中提取的重要方法:
// When a user is scrolling the collection, update the index view's value.
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
// This will update the index slider's value, but it won't send out the ValueChanged
// event if scrollViewIsUsing is true.
guard !indexSlider.userIsUsing else { return }
indexSlider.value = indexPath.section
}
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
indexSlider.userIsUsing = false
indexSlider.scrollViewIsUsing = true
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
indexSlider.scrollViewIsUsing = false
}
未来展望是什么?
- 测试!
- 垂直索引
- 更精确的位置和滚动
####享受!