13

我有一个设置为具有清晰背景的 UIScrollView。滚动视图的一部分确实有内容,但部分没有(因此它显示了它后面的其他视图)。我希望能够通过 UIScrollView 并点击到后面的 MKMapView,但仅限于 UIScrollView 的透明部分。

我发现了一些我很难理解如何开始工作的代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if (![self yourMethodThatDeterminesInterestingTouches:touches withEvent:event])
        [self.nextResponder touchesBegan:touches withEvent:event]; 
}

有人可以帮我想想如何将触摸事件转发到另一个视图后面的视图吗?我可以从 UIViewController 调用 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 吗?

4

2 回答 2

9

如果触摸发生在透明区域内,我们所做的是继承 UIScrollView 并实现将责任传递给其下的视图的逻辑。

在我们的例子中,透明区域是由 Y 轴上 120 的 contentOffset 定义的,这意味着我们的内容从 UIScrollView 的起点下方 120 点开始,代码如下所示:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    if (self.contentOffset.y < 0 && point.y < 0.0) {
        return NO;
    } else {
        return YES;
    }
}

显然,这种反应已经过了它的黄金时期,但希望这对任何寻找解决方案的人都有帮助。

于 2013-03-15T18:08:36.193 回答
3

基本上,由您决定将哪些触摸事件转发给另一个响应者。如果您只想转发所有触摸事件,只需if在您发布的代码中删除该语句,以便下一个响应者将接收所有触摸事件。

于 2011-02-18T23:00:29.670 回答