我有一个UIScrollView
里面有按钮,当我试图按下一个按钮并向侧面滑动时,UIScrollView
不动,但是当我滑得很快时确实在动我在按钮上使用UIControlEventTouchUpInside
。这是我用来向滚动视图添加按钮的代码:
-(void) setScrollView:(int) numberOfViews {
for (int i = 0; i < numberOfViews; i++) {
CGFloat xOrigin = i * 40;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self
action:@selector(scrollViewButtonClicked:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
button.frame = CGRectMake(xOrigin, 0, 40, 40);
button.tag = 1000+i;
button.backgroundColor = [self getColorForSound:self.sounds[i]];
[button setExclusiveTouch:YES];
[self.soundsScrollView addSubview:button];
}
}
即使用户按下按钮并尝试滚动,如何进行UIScrollView
滚动?
答案 0 :(得分:0)
这是设计的。从概念上讲,只有一个视图应该处理触摸事件。当您触摸按钮时,仅处理与按钮相关的处理(例如,按下按钮)。触摸事件不能同时由按钮和滚动视图处理。在按钮中启动触摸事件后,按钮“拥有”触摸,因此滚动视图无法处理它。
滚动视图移动时“非常快”滑动的原因是因为滚动视图首先检查触摸事件,因为它是按钮的父视图。如果触摸事件不是“移动”,它会将其传递给子视图,在这种情况下是您的按钮,以查看它们是否可以处理它。但是,如果滚动视图在按钮有机会处理触摸事件之前检测到触摸正在移动,则滚动视图将获取触摸事件的所有权并处理它以进行滚动。