我的视图有3个tableView' s。一个是"主表视图",然后我有一个'答案表视图'和'百分比表视图'。
当屏幕加载时,主表视图占据屏幕的前95%。屏幕的底部是一个包含2个按钮的UIView。 "答案"和"百分比"。
它的工作方式是,如果我点击"百分比"它将主表视图的高度更改为0,并将该高度提供给答案表视图。这可以激活"答案/百分比"查看顶部,并在其下方显示Answers或Percentage TableView。
以下是一个例子:
如您所见,我点击"百分比"激活它。如果你点击"百分比"再次将它重新制作成动画。
但是,我想要做的是"答案/百分比"视图位于View的底部,用户滚动Main Feed UP到达tableView的内容的最后(不仅仅是结尾,而是结束和更多一点),我想为它设置动画就像在.gif中一样。
同样,如果"答案/百分比"位于顶部,用户滚动下面的"答案表视图"超过上面没有更多数据的特定点,它将完全动画。
另外,我不想要"答案/百分比"视图位于中间,并显示顶视图和底视图。所有这一个,或另一个,但不是两者兼而有之。我现在所拥有的。
我需要知道的是......如何检测用户是否滚动到表格视图的顶部或底部+30像素,以启动我的动画?
答案 0 :(得分:5)
您可以使用表视图的contentOffset属性。
if(tableView.contentOffset.y >= (tableView.contentSize.height - tableView.frame.size.height)) {
// Start the animation
}
我没有测试过这个,但请告诉我它是否有效。
答案 1 :(得分:0)
根据 sublimepremise 的方法做出另一个答案,因为以这种方式格式化和发布代码更容易。基本想法是检查表视图的.contentOffset.y
,例如通过在其代理中实施scrollViewDidScroll
,并相应地触发动画。
它可能有一点QnD的感觉,但如果你还需要在触发动画时中止用户的拖动动作,一个简单的方法就是“重置”表格视图的手势识别器。在代码中可能看起来像这样:
static const CGFloat kChrisTableViewAnimationThreshold = 30.0f;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == self.topTableView) {
if([self scrolledPastBottomThresholdInTableView:self.topTableView]) {
// Start the animation
// ...
// Toggling the table view's pangGestureRecognizer off and on cancels the gesture
self.topTableView.panGestureRecognizer.enabled = NO;
self.topTableView.panGestureRecognizer.enabled = YES;
}
}
}
- (BOOL)scrolledPastBottomThresholdInTableView:(UITableView *)tableView {
return (tableView.contentOffset.y - kChrisTableViewAnimationThreshold >= (tableView.contentSize.height - tableView.frame.size.height));
}
请注意,此插图显然仅涵盖识别顶部表格视图滚动到其底端的时间,但调整它以处理其他场景应该非常简单。