使用水平UIScrollView对UITableView进行视差效果

时间:2013-09-03 12:54:22

标签: ios objective-c uitableview uiscrollview parallax

我在tableview上创建了一个视差视图,在headerTableView后面放置了一个水平滚动视图。

我设置tableView.backgroundColor = [UIColor clearColor];

然后是tableView.headerTableView.backgroundColor = [UIColor clearColor];

并设置我的scrollView:

[self.view insertSubview:scrollView belowSubview:tableview];

视差效果完美但我的问题是用户无法与水平滚动视图交互,因为它位于tableView后面;

我试图放tableView.headerTableView.userInteractionEnabled = NO;,但它不起作用。

如果我想与scrollView进行交互,我需要设置tableView.userInteractionEnabled = NO;,但我不能再与tableView交互了。

是否有一种棘手的方法可以与scrollView和tableView进行交互并保持视差效果?

2 个答案:

答案 0 :(得分:2)

如果你想通过视图传递触摸,你可以覆盖视图上的hitTest并将命中传递给另一个。

在我的情况下,我有一个非常窄的scrollview,把它放到一个更大的容器中并将其设置为属性(touchReceivingView)。在容器上,我使用以下代码将hitTest传递给另一个视图:

- (UIView *) hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
        return touchReceivingView;
    }
    return nil;
}

答案 1 :(得分:0)

您是否尝试将userInteraction禁用为水平滚动视图并实施UISwipeGestureRecognizer以捕获用户的滑动? 之后,您可以根据识别器触发的事件以编程方式“移动”水平滚动视图