检测UIScrollView外部的点击次数

tom*_*mys 8 uiscrollview ios

我已经根据这种技术实现了一个分页滚动(iOS开发.如何扩展UIScrollView的滚动事件响应区域?)并且它按预期工作.

我正在滚动的视图包含几个按钮,我希望不仅能够点击滚动视图中心/分页的视图,还能够点击它们左侧和右侧的视图.我找不到任何方法来解决这个问题,但我还不是真正的iOS-Jedi,希望你们其中一个人虽然:)

我的xib,UIScrollView位于中心

因此,从屏幕上可以看出,UIScrollView大约是窗口宽度的三分之一,UIScrollView的内容大得多:大约1500px并且包含许多以编程方式添加的按钮.这个解决方案很酷,实际工作的部分是按钮:1)被分页到滚动视图2)在滚动视图外可见(因为滚动视图未选中"剪辑子视图")3)按钮是在uiscrollview中可见时可单击.

但是不起作用的只是这样: - 当前在窗口外的按钮在点击它们时不会收到"他们的"点击,而是将事件转发到底层(窗口的白色部分)视图.

tom*_*mys 15

所以,

我终于设法解决了这个难题,解决方案分为两部分.问题是,正如您所记得的那样,点击事件没有传递到UIScrollView外部(可见)的按钮.事实证明,点击是由底层视图捕获的,并且可以通过弯曲关于谁被击中的规则来操纵他们找到目标的方式,从而欺骗事件通过你想要的地方.不确定这是不是应该怎么做但它解决了我的问题.. :)

1)第一个必须在底部视图中覆盖以下方法,以便在适当时返回scrollview而不是自身.

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{
    UIView *view = [super hitTest:point withEvent:event];

    if (view == self) 
        return [self scrollView];

    return view;
}
Run Code Online (Sandbox Code Playgroud)

2)scrollView必须覆盖两个方法,将点击移交给其包含的对象.

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
    {
       UIView *view = [super hitTest:point withEvent:event];
       // Always return us.
       return view ;    
     }
Run Code Online (Sandbox Code Playgroud)

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    // We want EVERYTHING!
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

非常感谢您的评论和愿意提供帮助.我好