以编程方式检测滚动视图外部的触摸

时间:2013-10-10 03:30:07

标签: iphone ios objective-c uiscrollview

我正在尝试创建一个可水平滚动的UIScrollView。 I am using this Ray Wenderlich tutorial。我有滚动视图显示并正常工作,但目前难以在教程中“检测滚动视图外的触摸”部分。

问题在于我以编程方式创建所有内容。我对本教程代码的这一部分特别感到困惑(在 ScrollViewContainer.m 中):

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
    UIView *view = [super hitTest:point withEvent:event];
    if (view == self) {
        return _scrollView;
        }
    return view;
}

其中_scrollView是IBOutlet(在 ScrollViewContainer.h 中):

@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;

据我所知,_scrollView“连接”是在故事板上通过插座完成的。我怎么能以编程方式做到这一点?

3 个答案:

答案 0 :(得分:1)

使用这段代码我找到了我的触摸对象并隐藏了视图,所以希望你可以通过一些技巧修复它并修改相同的代码只需传递你的scrollview对象并记录其触摸与否。

#pragma mark
#pragma mark - Touch Events
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint imgPop = [touch locationInView: _scrollView];
    if ([_scrollView pointInside:imgPop withEvent:event])
    {
        NSLog(@"Touch Inside ScrollView");
    } else {
        NSLog(@"Touch Outside ScrollView");
    }
}

如果您发现任何困难,请与我联系。

答案 1 :(得分:0)

检测scrollview之外的触摸,您只需访问touchEvents的{​​{1}}。

  • 的touchesBegan,
  • touchesEnded,
  • touchesMoved,
  • touchesCancelled

尝试触摸任何一个想要的点击。

答案 2 :(得分:0)

仅当您将滚动视图设置为小于屏幕(并将其hitTest:withEvent:设置为clipsToBounds)时,才需要Ray Wenderlich教程中的自定义NO方法: / p>

app screenshot

该方法将滚动视图外部的触摸转发给它。

因此,在您的源代码中,您需要调用类似

的内容
@property (nonatomic, strong) UIScrollView *scrollView;
...
UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(
    20, 
    20, 
    self.view.frame.size.width - 20, 
    self.view.frame.size.height - 20
)];