Iphone 使用UIGestureRecognitor中断UIScrollView的滚动/动画
我有一个Iphone 使用UIGestureRecognitor中断UIScrollView的滚动/动画,iphone,objective-c,ios,uiscrollview,uigesturerecognizer,Iphone,Objective C,Ios,Uiscrollview,Uigesturerecognizer,我有一个UIScrollView和一个uitappesturerecognizer,这两个都是非常基本的,并且让它们以我需要的任何方式协同工作,除了一个。UIScrollView不使用任何缩放,而UIAPTgestureRecognitizer现在只写入控制台 当点击UIScrollView时,无论是静止还是通过setContentOffset设置动画,我都可以让UITapgestureRecognitor写入控制台,但当UIScrollView由于被刷卡而移动时,我无法让它工作。当滑动UISc
UIScrollView
和一个uitappesturerecognizer
,这两个都是非常基本的,并且让它们以我需要的任何方式协同工作,除了一个。UIScrollView
不使用任何缩放,而UIAPTgestureRecognitizer
现在只写入控制台
当点击UIScrollView
时,无论是静止还是通过setContentOffset
设置动画,我都可以让UITapgestureRecognitor
写入控制台,但当UIScrollView
由于被刷卡而移动时,我无法让它工作。当滑动UIScrollView
且仍处于运动状态时,滑动后的第一次轻触将使其停止移动,然后UITapgestureRecognitizer
仅拾取第二次轻触。我希望在第一次点击时停止UIScrollView
的滚动,并通过UITapgestureRecognitizer
写入控制台
我希望我在这里遇到的问题只是通过我对UIScrollView
或UITapgestureRecognitizer
的了解上的一个缺口,并且只有一个属性可以解决这个问题,但到目前为止,阅读量并没有帮助我解决这个问题。关于这是否可能有什么想法
编辑:感谢您的建议,请参见下面的
对不起,我想我解释得不太清楚。我意识到静止的UIScrollView
上的第一个动作是滑动(在我的例子中,这只是由UIScrollView
btw处理,而不是手势识别器)
问题是在滑动和释放后,如果在移动过程中轻触(并且没有其他触摸进行),则UICapgestureRecognitizer
不会拾取它,而只会被UIScrollView
拾取并停止移动UIScrollView
。如果你让它减速,然后点击,这工作正常。此外,如果它是由于动画而不是滑动而移动的,则轻触也可以正常工作
这与使用“UILongPressGestureRecognitor”时是一样的,这正是我理想中想要使用的,但我想如果我不能让它与水龙头一起工作,我就没有机会了 听起来您需要实现 为您的
UIAgestureRecognitor
委派方法,并为要与之同步解释点击手势的UIAgestureRecognitors
返回YES
e、 十,
n、 b.您可能希望在决定要与哪个
UIgestureRecognitor
同步时更具辨别力。该示例将与其他所有手势识别器一起使用 问题在于,当用户第一次点击滚动UIScrollView
时,这不是点击,而是点击。只有当用户在几乎相同的位置轻触并释放手指时(无需在屏幕上拖动手指),才会将其视为轻触
解决问题的方法是:使用UIScrollView
delegate方法ScrollViewWillBeginDraging
,这样您就可以知道用户何时点击并开始拖动scrollview,还可以为那些真正的点击添加UITapGestureRecognitor
// Somewhere in your code...
UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
[tap release];
// And the delegate method...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}