iPhone:点击透明UIScrollView后面的视图

13

我有一个UIScrollView,其背景设置为透明。其中一部分scrollview有内容,但另一部分没有(因此它会显示在其后面的其他视图)。我想能够通过UIScrollView并且仅限于UIScrollView透明的部分点击到后面的MKMapView。

我找到了一些代码,但我真的很难理解如何使其工作:

- (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 吗?


有趣的是,我刚好遇到了相反的问题。我的触摸事件出现了某些原因被传递了下去。给我一分钟,我会看看能否记起当时发生了什么。 - jakev
好的,我的情况并不重要。你不理解的是什么?将触摸事件传递给下一个响应者似乎是合理的。 - jakev
我猜我对nextresponder一无所知。我该如何将触摸事件传递给它呢? - Nic Hubbard
1
这就是你发布的代码所做的事情。你只需要编写一个方法来确定它是否应该被传递。 - Jim
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;
    }
}

显然,这个回答已经过时了,但希望对正在寻找解决方案的人有所帮助。


3

基本上,你可以决定哪些触摸事件需要转发给其他响应者。如果你想转发所有的触摸事件,只需删除你发布的代码中的那个if语句,这样下一个响应者将接收所有的触摸事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接