- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{
if(!self.dragging)
{
[[selfnextResponder]touchesBegan:toucheswithEvent:event];
}
[supertouchesBegan:toucheswithEvent:event];
//NSLog(@"MyScrollView touch Began");
}
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
if(!self.dragging)
{
[[selfnextResponder]touchesEnded:toucheswithEvent:event];
}
[supertouchesEnded:toucheswithEvent:event];
}
下面这个函数的功能是判断是否可以把touch 事件传递给子视图,即在他上面的视图。当返回是yes 的时候就表示可以,就当点击子视图view 的时候停止响应scroll事件,改而响应子视图的touch 事件,当为no 时则拒绝子视图响应,执行父视图的touch 事件,下面的代码时实现了当子视图时按钮的时候就响应其对应的功能,子很多时候还是很管用的。
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
if ([view isKindOfClass:[UIButton class]])
{
return YES;
}
else
{
return NO;
}
}
setDelaysContentTouches 这个函数主要时判断是否延迟执行tracking 一般情况下是yes 即会延迟执行,就是先等待一会儿看scrollview 是否有touch 事件发生,如果没有则转而执行子视图的 的touch 事件。
//yes 则发送一个可以touchesCancelled:withEvent: 然后把这个事件当作一次滚动赖实现
[baseScrollView setCanCancelContentTouches:YES];
//滚动的时候是否可以除边界,即到边界的时候是否可以多看到一点内容
[baseScrollView setBounces:NO];
// 当值是NO 立即调用 touchesShouldBegin:withEvent:inContentView 看是否滚动 scroll
[baseScrollView setDelaysContentTouches:NO];
点击打开原文链接