Ios UIPangestureRecognitor不转发触摸
我的Ios UIPangestureRecognitor不转发触摸,ios,objective-c,uigesturerecognizer,Ios,Objective C,Uigesturerecognizer,我的UIViewController中有两个UICollectionView。在VCs视图的顶部,我有一个uigestureRecognitor 我希望UIGestureRecognizer启动,生成逻辑,并将对下划线视图的触摸转发到它们的对象(如滚动集合视图) 我已将uigesturecognizer的属性cancelsTouchesInView设置为NO。但这没用 这些都没有帮助: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture
UIViewController
中有两个UICollectionView
。在VCs视图的顶部,我有一个uigestureRecognitor
我希望UIGestureRecognizer
启动,生成逻辑,并将对下划线视图的触摸转发到它们的对象(如滚动集合视图)
我已将uigesturecognizer
的属性cancelsTouchesInView设置为NO
。但这没用
这些都没有帮助:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) {
return YES;
}
return NO;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) {
return YES;
}
return NO;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) {
return YES;
}
return NO;
}
首先,
UIGestureRecognitor
是一个抽象基类。您必须指定它的一个子类以供使用:UITapGestureRecognizer
。
接下来,您必须设置其委托,并使用GestureRecognitizer委托方法同时从shouldRecognitize返回YES
。
我认为这样应该行得通
但是让我问你一个问题:为什么你不首先使用集合视图委托方法didSelectItem:atIndexPath
?大约两年前,我遇到了一个类似于你的问题,但我的问题是MKMapView而不是UICollectionView,但我相信我们可以解决它
您是否检查过,可能是因为UICollectionView正在使用触摸,而您的手势从未到达,所以您没有收到代理消息
- 尝试将您的手势附加到UICollectionVIew上,而不是VCs的视图上李>
它应该可以工作,但如果不行,请尝试删除UICollection以进行测试,将该手势附加到VC的视图上,然后点击该视图以确保该手势正常工作
- 如果即使没有视图层次结构上的UICollectionView,UI手势也无法工作,则说明您没有正确初始化它
好的,如果在VC的视图上附加手势时调用了代理,但在UICollectionView上附加手势时没有调用代理,我很确定您的手势和UICollectionView的手势之间存在一些手势冲突
- 在这种情况下,循环UICollectionView的手势,并要求手势做出失败响应。以这个片段为例:
for (UIGestureRecognizer *gesture in collectionView.gestureRecognizers) {
[gesture requireGestureRecognizerToFail:yourGesture];
}
或者
对UIView进行子类化,将其放置在视图控制器的最顶部,UICollectionView的上方,然后覆盖
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
方法,在其中执行操作,然后返回nil以将触摸传递到上面的视图
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
//Do your stuff here ... you can also
//return self; if you want to consume the touch
//You can make this UIView's subclasse a "TouchDetector layer"
//and call a delegate from here to notify other classes that
//this view is been touched...
//returning nil, the touch will not be blocked and will be reached
//by the view above it.
return nil;
}
我希望上面的一个能解决你的问题。或者至少是正确的方法…这不起作用:-(BOOL)GestureRecognitzer:(UIGestureRecognitzer*)GestureRecognitzer应该需要AlbyGestureRecognitzer:(UIGestureRecognitzer*)其他GestureRecognitzer{if([GestureRecognitzer isMemberOfClass:[UIPangestureRecognitzer class]]){返回是;}返回否;}关于第二个问题,didSelectItem:atIndexPath没有回答我的问题needs@Luda:请提供有关您的问题的更多信息。这太模糊了。所以你说的是一个UIPangestureRecognitor和一个UICollectionView,它们应该同时响应触摸?此外,我没有说要实现其他委托方法……您告诉了我们期望的内容和您已经做了什么。还请指定实际(当前)行为。到底发生了什么?是否执行了gestureRecognizer
方法,但未转发到基础视图?或者手势识别器
方法本身没有被调用,但是底层视图得到了触动?或者两者都没有发生。