(iphone)uiscrollview即使收到touchesBegan / moving / ended事件也不会滚动

时间:2011-02-10 11:42:08

标签: iphone touch scrollview

我已将scrollView.userInteractionEnabled设置为NO,以便superview捕获触摸事件。

在适当的时候,从我的一个自定义视图类中调用

scrollView.userInteractionEnabled = YES;
[scrollView touchesBegan: touches withEvent: event];
or moved/ended similarly.

我可以看到我的scrollView正在使用我的调试输出获取touche事件消息 但是我没有看到滚动它怎么可能?

contentSize足够大,scrollEnabled为YES (当我在启动时设置scrollView.userInteractionEnabled = YES时,scrollView滚动正常)

例如,我的UIScrollView的子类有

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
    SYSLOG(LOG_DEBUG, "MyScrollView touchesBegan");
    [self setUserInteractionEnabled: YES];
    [self setScrollEnabled: YES];
    [super touchesBegan: touches withEvent: event];
}
  • 修改

在视图类或视图控制器类中重载touchesBegan可能会有所不同吗?

1 个答案:

答案 0 :(得分:0)

看起来你不能只是传递接触并让它回应:(

您必须使用[UIScrollView setContentOffset:animated:]方法自行移动滚动视图。


拦截触摸的更好方法可能是在滚动视图前放置一个视图 - 抓住您想要收听的任何触摸,然后将其传递给链中的下一个响应者。

你可以创建UIView的子类来覆盖触摸处理方法,例如:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    if (scrollViewShouldGetThisTouch)
        [self.nextResponder touchesBegan:touches withEvent:event];

}

只是让这个视图与你的滚动视图具有相同的框架,但在ui中是它的前面(当然是透明的!)。

OR

你可以继承UIScrollView - 虽然如果Apple改变了UIScrollView的实现,这可能会导致奇怪的错误。我会选择其他选项!