Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用UIGestureRecognitor中断UIScrollView的滚动/动画_Iphone_Objective C_Ios_Uiscrollview_Uigesturerecognizer - Fatal编程技术网

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;
}