2

我一直在这里寻找所有其他类似的主题,使用 UIGestureRecognizers、使用 hitTest:withEvent、pointInside:withEvent: 等,但对于我需要实现的目标似乎没有什么好说的。

基本上我有一个主视图(一个普通 UIViewController 的 self.view)和一个小的矩形 UIScrollView 附加到它的底部:scrollView 充满了一些 UIImageViews,用户可以像往常一样滚动它。

但是用户也应该能够将一个 UIImageView (或它的副本)从 UIScrollView 拖到主视图,而且,这是我发现非常困难的,使用相同的拖动手势,因此我需要一种方法:

1)区分正常的水平滚动手势,这应该由 UIScrollView 以通常的方式处理和在图像视图上的拖动手势。

2)一旦确定了拖动手势,应该将触摸传播到超级视图,它将承载 UIImageView 的副本,并且使用相同的拖动手势继续在主视图上拖动,即使超出 UIScrollView 的范围。

请注意,我知道如果 UIScrollView 具有 userInteractionEnabled = NO,则触摸会传播到子视图,但是 1)我想将其传播到父视图而不是子视图,2)userInteractionEnabled 属性显然只有在初始手势为终止,而我需要使用单个拖动手势。

非常感谢您的帮助。

4

1 回答 1

2

所以,到目前为止,我最终实现了touchesShouldBegin:withEvent:inContentView:我的 UIScrollView 子类的方法,但delayContentTouches设置为 YES (默认)而不是 @nhahtdh 建议的 NO 。

奇怪的是,即使只实现该方法就足以让我的子视图拦截拖动,并且我的滚动视图仍然正常滚动,而 delayContentTouches 设置为 NO 我无法滚动它,因为所有子视图都开始移动。

真的要归功于@nhahtdh,所以伙计,如果您发布答案,我会接受,非常感谢您的帮助。

于 2012-11-25T18:57:10.120 回答