我已将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可能会有所不同吗?
答案 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的实现,这可能会导致奇怪的错误。我会选择其他选项!