SPTScrollViewScrubberController 向 UIScrollView 实例或其任何子类添加一个卷尺以快速滚动查看大量内容。
它受到NSScreencast 第 97 集视频:Scrolling Nub (11/28/2013)的启发。
添加卷尺到表格视图只需要两个步骤。
导入头文件,并在您的 UITableViewController 子类的属性中添加一个 SPTScrollViewScrubberController 实例的属性。
@property (nonatomic,strong) SPTScrollViewScrubberController* scrubController;
在您的 -viewDidLoad 方法中实例化和设置 SPTScrollViewScrubberController 对象。
self.scrubController=[[SPTScrollViewScrubberController alloc] init];
self.scrubController.scrollView=self.tableView;
self.tableView.delegate=self.scrubController;
如果无法将 SPTScrollViewScrubberController 实例设置为表格视图的代理,您必须从您的表格视图代理(通常是 UITableViewController 子类)转发 3 个代理方法到卷尺控制器
-(void)scrollViewDidScroll:(UIScrollView*)scrollView {
[self.scrubController scrollViewDidScroll:scrollView];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
[self.scrubController scrollViewDidEndDragging:scrollView willDecelerate:decelerate];
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self.scrubberController scrollViewDidEndDecelerating:scrollView];
}
您很可能想使用一个自定义卷尺视图。为此,只需将 scrubberView 属性设置为 UIView 实例或其任何子类。该视图中不能有任何自绘约束。使用其 frame 或 center 属性定位和调整大小。
默认情况下,SPTScrollViewScrubberController 仅更改卷尺视图在拖动/滚动轴上的位置。与 UITableView 一起使用时,这始终是垂直轴(y 坐标)。
如果您在控制器上设置了 horizontalAlignment 属性,它还会在水平轴上定位 scrubberView。您可以选择将其固定在任何一边或滚动视图的中心。当 scrollView 的框架发生变化时,例如由于界面旋转,SPTScrollViewScrubberController 会根据情况相应地调整卷尺视图的位置。
使用 SPTScrollViewScrubberController 的 edgeInsets 属性可以使用边距配置,即滚动视图边缘和卷尺视图之间的空白空间。
如果表格视图的内容区域高度小于其内容区域高度的两倍,则卷尺视图将隐藏。内容区域是通过将内容偏移量应用到其边界来确定的。您可以调整卷尺将显示的最小因子,通过为您 SPTScrollViewScrubberController 实例设置 minimumVerticalScrollFactor 属性。该因子必须大于 1.0
。
滑块可以有三种状态
未选中 / 未高亮
这是空闲状态。默认情况下,滑块视图通过将其alpha值设置为0.3来淡出。
选中 / 未高亮
在任何滚动事件期间,滑块视图进入此状态。经过一段时间延迟后,它返回到上一个状态。在默认配置中,视图的alpha值设置为1.0。
选中 / 高亮
当用户触摸并保持滑块视图时,它处于此状态。在默认配置中,与上一个状态没有视觉上的区别。
在SPTScrollViewScrubberController中,有四个块属性用于配置视图转换
@property (nonatomic,copy) void(^选高亮滑块视图)(UIView* view);
@property (nonatomic,copy) void(^取消高亮滑块视图)(UIView* view);
@property (nonatomic,copy) void(^选择滑块视图)(UIView* view);
@property (nonatomic,copy) void(^取消选择滑块视图)(UIView* view);
每个都会带有指向滑块视图对象的指针作为参数。默认实现会设置滑块视图对象的相应属性,如果它响应设置选择器(-[setSelected:], -[setHighlighted:])。选择/取消选择块还会设置视图的alpha值,如上所述。
目前只有一个转换会被动画处理,即取消选择。动画速度由滑块控制器的取消选择动画持续时间属性配置。在滚动操作完成后,取消选择会延迟指定在取消选择延迟属性中的时间间隔。