我在 UIView 中有一个 UITableView,其中 UIView 充当上拉视图。我想在屏幕上上下拖动视图,并让视图随着我的拖动而向上移动。
如果我正在触摸 UITableView 部分,那么我想向上拖动直到 UIView 达到某个上限,然后我的拖动开始向上拖动 UITableView。
如果 UIView 处于其上限并且我在 UITableView 上向下拖动,那么我希望 UITableView 向下拖动直到它到达它的开头,然后将拖动转移到 UIView,将它与 UITableView 一起向下拖动到屏幕上.
此外,UITableVIew 具有需要继续对按下做出反应的按钮,因此我不能在需要时简单地关闭 tableview 的用户交互性。
目前,当 UIView 位于其顶部停车位置时,我正在设置一个标志,然后在扩展的 UITableView 类中使用以下方法
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint then = [[touches anyObject] previousLocationInView: self];
CGPoint now = [[touches anyObject] locationInView: self];
//CGFloat deltaY = fabs(then.y - now.y);
if(self.contentOffset.y == 0 && now.y > then.y)
inSlideMode_ = YES;
if(inSlideMode_)
{
[self.nextResponder touchesMoved:touches withEvent:event];
}
else
{
[super touchesMoved:touches withEvent:event];
}
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint then = [[touches anyObject] previousLocationInView: self];
CGPoint now = [[touches anyObject] locationInView: self];
//CGFloat deltaY = fabs(then.y - now.y);
if(self.contentOffset.y == 0 && now.y > then.y)
inSlideMode_ = YES;
if (inSlideMode_)
{
//forwarding action:
[self.nextResponder touchesBegan:touches withEvent:event];
}
else
{
[super touchesBegan:touches withEvent:event];
}
}
-( void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if(inSlideMode_)
{
[self.nextResponder touchesEnded:touches withEvent:event];
}
else
{
[super touchesEnded:touches withEvent:event];
}
previousTouchY_ =UNTOUCHED_Y_POSITION;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y <= 0)
{
self.scrollEnabled = NO; // if we reach the top of scrolling then should switch tableview into the pullup interactor
self.inSlideMode = YES;
}
}
在 UIView 扩展类中,我重写了相同的方法来处理拖动,并查看它是否停靠在顶部。
目前它几乎可以工作,但是当拖动 UITableView 时,一旦它到达底部,我需要抬起手指并再次开始拖动它以使 UIView 被向下拖动。有什么建议么???谢谢