1

我正在开发一个 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:)

但现在表格滚动并向上移动。

“我希望表格不要滚动,而是移动到屏幕上的某个点,然后停止移动并开始滚动。”

处理这个问题的最佳方法是什么?

干杯

4

3 回答 3

2

我认为你这样做的方式很好。您只需要在某个点之后停止 UIGestureRecognizer 处理任何更多的触摸。所以我要做的(对现有代码的更改最少)只是覆盖委托函数:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

在该函数中,分析 table view 的位置,如果 table view 已经达到一定高度,则返回 NO。这将阻止 UIPanGestureRecognizer 接受触摸事件并将其传递到链上,这应该直接传递到表视图的 UIScrollView。

或者,如果我有时间弄清楚这一点,我会尝试将图像作为表的标题(self.tableView.tableHeaderView)来完成。这样所有的滚动都是在表格的滚动视图中完成的,表格的框架不必移动。如果您想为 tableHeaderView 添加一些很酷的效果,您可以随时覆盖 UIScrollViewDelegate 函数- (void)scrollViewDidScroll:(UIScrollView *)scrollView并在表格向上滚动初始半屏时稍微移动标题中的图像(这与 Path 所做的效果相同)。但是,这不允许您将图像固定在表格视图的最顶部……整个图像会滚动。只是我的2美分。:)

于 2013-06-01T07:06:53.417 回答
0

如果我正确理解了这个问题,最简单的解决方案是以编程方式将 tableView 标题设置为所需的图像。(我认为这就像 Path 设置位置的方式,只是他们使用的是地图而不是图像。)

UIImage *image = [UIImage imageNamed:@"image_name"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.tableView setTableHeaderView:imageView];

这相当于将带有适当图像的 UIImageView 拖到情节提要中的 tableView 标题上。

请注意:表格标题视图与节标题不同。有关详细信息,请参阅文档

于 2013-09-17T20:20:12.437 回答
-2

你能试试这个代码来移动tableview吗

   [UIView animateWithDuration:1.5 animations:^
     {
         //ADD CODES HERE FOR STARTING STATE (FRAME FOR UITABLEVIEW )
        // eg: table.frame=CGRectMake(0,320,320,200);   tableview lying on bottom of viewcontroller with 200px height 


     } completion:^(BOOL finished)
     {


        // ADD CODES HERE  TO MAKE YOUR FINAL FRAME OF UITABLEVIEW
         // eg: table.frame=CGRectMake(0,0,320,200);   tableview moving to top of viewcontroller with 200px height



     }];

试试这个让我知道结果

请在取消投票之前让我知道原因,因为这些代码对我有用

于 2013-06-01T06:36:48.997 回答