我正在开发一个 iPhone 应用程序,我想将表格视图(而不是单元格)拖到屏幕上的某个点。我的桌面视图位于屏幕的下半部分,上半部分有一个图像。
当我滚动表格以查看下面的行时,表格实际上应该向上移动到图像上方(y pos 减小,高度会增加)。表格将上升,直到填满整个屏幕,为图像留下几个像素并停靠在那里,从那时起,表格应该滚动。向下滚动也应有相同的行为。
这听起来可能有点奇怪,但这是一种新兴的 iOS 模式。
我设法使用下面的代码片段完成了第一部分。
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanForScrollView:)];
panGestureRecognizer.maximumNumberOfTouches = 1;
panGestureRecognizer.delegate = self;
panGestureRecognizer.minimumNumberOfTouches = 1;
[self.tableView addGestureRecognizer:panGestureRecognizer];
- (void)handlePanForScrollView:(UIPanGestureRecognizer *)gesture {
switch (gesture.state) {
case UIGestureRecognizerStateBegan:
break;
case UIGestureRecognizerStateChanged: {
CGPoint movement = [gesture translationInView:self.view];
CGRect frame = self.tableView.frame;
frame.origin.y += movement.y;
if(frame.origin.y >= Y_OFFSET && frame.origin.y < self.original_frame.origin.y){
frame.size.height -= movement.y;
self.tableView.frame = frame;
[gesture setTranslation:CGPointZero inView:self.view];
}
break;
}
case UIGestureRecognizerStateEnded:
case UIGestureRecognizerStateCancelled:{
//NSLog(@"End");
break;
}
default:
;
break;
}
}
这工作正常,表格向上移动并停靠在 Y_OFFSET 下方。但正如您想象的那样,表格不再滚动。
所以我尝试了这个
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if(self.tableView.frame.origin.y <= Y_OFFSET || self.tableView.frame.origin.y >= self.original_frame.origin.y){
NSLog(@"Here");
return YES;
}
return NO;
}
“这里”消息正在控制台上打印,但表格不滚动。
我什至尝试将 panGestureRecognizer 用于 UITableView 而不是我的 UIPanGestureRecognizer。
self.tableView.panGestureRecognizer addTarget:self action:@selector(handlePanForScrollView:)
但现在表格滚动并向上移动。
“我希望表格不要滚动,而是移动到屏幕上的某个点,然后停止移动并开始滚动。”
处理这个问题的最佳方法是什么?
干杯