Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Ios 手势识别器的子视图实现应开始:干扰父视图';这是该方法的实现_Ios_Iphone_Objective C_Uiview_Uigesturerecognizer - Fatal编程技术网

Ios 手势识别器的子视图实现应开始:干扰父视图';这是该方法的实现

Ios 手势识别器的子视图实现应开始:干扰父视图';这是该方法的实现,ios,iphone,objective-c,uiview,uigesturerecognizer,Ios,Iphone,Objective C,Uiview,Uigesturerecognizer,我有一个ParentViewController,它的视图有一个子视图。我希望ParentViewController有机会在其视图中评估手势,并且只有在这些手势失败时,子视图才有机会评估手势。但是相反,事情似乎朝着相反的方向发展,子视图实际上是在评估属于父视图的挤压手势。下面是如何设置的: ParentViewController有一个夹点手势识别器,其委托设置为ParentViewController: pinchRecognizer = [[UIPinchGestureRecognizer

我有一个ParentViewController,它的视图有一个子视图。我希望ParentViewController有机会在其视图中评估手势,并且只有在这些手势失败时,子视图才有机会评估手势。但是相反,事情似乎朝着相反的方向发展,子视图实际上是在评估属于父视图的挤压手势。下面是如何设置的:

ParentViewController有一个夹点手势识别器,其委托设置为ParentViewController:

pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
pinchRecognizer.delegate = self;
[self.view addGestureRecognizer:pinchRecognizer];
ParentViewController实现
UIgestureRecognitizerDelegate
协议,具体实现方法
gestureRecognitizerShouldBegin:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer  //DEPENDENCY
{
    return [gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]];
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:[self superview]];
        return (fabsf(translation.x) > fabsf(translation.y) && translation.x < 0);
    } else if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
        return YES;
    }
    return NO;
}
ParentViewController的视图有一个子视图。子视图具有轻触手势识别器和平移识别器:

_tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stepTapped:)];
[self addGestureRecognizer:_tapRecognizer];
_tapRecognizer.numberOfTapsRequired = 1;
_tapRecognizer.delegate = self;

_panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self addGestureRecognizer:_panRecognizer];
_panRecognizer.maximumNumberOfTouches = 1;
_panRecognizer.delegate = self;
子视图还实现了
UIGestureRecognitizerDelegate
协议,具体实现了方法
GestureRecognitizerShouldBegin:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer  //DEPENDENCY
{
    return [gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]];
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:[self superview]];
        return (fabsf(translation.x) > fabsf(translation.y) && translation.x < 0);
    } else if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
        return YES;
    }
    return NO;
}
尽管有最后两行代码,但我发现子视图的
gestureRecognitzerBegin:
方法在ParentViewController之前被调用。此外,ParentViewController中的
手势识别器的实现应该开始:
甚至不会运行,除非我修改子视图的实现,在发生挤压手势时返回
YES
(参见最后一行):

-(BOOL)手势识别器应开始:(uigesturecognizer*)手势识别器
{
if([GestureRecognitor IsKindof类:[UIPangestureRecognitor类]]){
CGPoint translation=[(UIPangestureRecognitor*)手势识别器translationView:[自我超级视图]];
返回(fabsf(translation.x)>fabsf(translation.y)&&translation.x<0);
}else if([GestureRecognitor IsKindof类:[UITapGestureRecognitor类]]){
返回YES;
}
return[gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]];
}
使用上述代码,子视图的
手势识别器应该开始:
运行,如果是捏手势,则在最后返回
YES
时,将调用ParentViewController的
手势识别器应该开始:

如果不清楚,我期望的行为是ParentViewController的
手势识别器应该首先被调用:
,只有在失败时才会调用子视图的实现