【问题标题】:Detecting touches outside a scroll view programmatically以编程方式检测滚动视图外的触摸
【发布时间】:2014-03-27 03:45:43
【问题描述】:

我正在尝试创建一个可水平滚动的 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“连接”是通过插座在情节提要上完成的。我应该如何以编程方式做到这一点?

【问题讨论】:

    标签: iphone ios objective-c uiscrollview


    【解决方案1】:

    通过使用此代码,我找到了我的触摸对象并隐藏了视图,因此希望您可以通过一些技巧和修改相同的代码来修复它,只需传递您的滚动视图对象并在其中记录它是否被触摸。

    #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");
        }
    }
    

    如果您发现实施它有任何困难,请告诉我。

    【讨论】:

      【解决方案2】:

      检测到scrollview 之外的触摸,您只需访问UIViewtouchEvents

      • 触摸开始,
      • touchesEnded,
      • touchesMoved,
      • touchesCancelled

      开始尝试触摸任何您想要的点按。

      【讨论】:

        【解决方案3】:

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

        该方法将使滚动视图之外发生的触摸被转发给它。

        所以在你的源代码中你需要调用类似的东西

        @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
        )];   
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-22
          • 1970-01-01
          • 1970-01-01
          • 2014-06-21
          • 1970-01-01
          • 2015-05-06
          • 1970-01-01
          相关资源
          最近更新 更多