Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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_Uigesturerecognizer - Fatal编程技术网

Ios 让滑动手势优先于按钮

Ios 让滑动手势优先于按钮,ios,uigesturerecognizer,Ios,Uigesturerecognizer,我在视图中有两个UIButton(一个是,另一个不是)。我现在想添加一个“未回答”,这将通过向下滑动视图来表示 问题是用户可能会在视图上向下滑动,但在此过程中会按下其中一个按钮。当这种情况发生时,我想忽略按钮按下,如果有一个正在进行的刷卡。如果只是轻触一个按钮,答案就会被记录下来 因此,如果发生滑动,我想调用滑动手势的动作方法。如果确定没有发生滑动,但触摸了两个按钮中的一个,我想调用它们各自的操作方法。但是,如果在滑动过程中触碰了按钮,我只想调用滑动手势的动作方法 我知道有一种方法,但我想知道是

我在视图中有两个UIButton(一个是,另一个不是)。我现在想添加一个“未回答”,这将通过向下滑动视图来表示

问题是用户可能会在视图上向下滑动,但在此过程中会按下其中一个按钮。当这种情况发生时,我想忽略按钮按下,如果有一个正在进行的刷卡。如果只是轻触一个按钮,答案就会被记录下来

因此,如果发生滑动,我想调用滑动手势的动作方法。如果确定没有发生滑动,但触摸了两个按钮中的一个,我想调用它们各自的操作方法。但是,如果在滑动过程中触碰了按钮,我只想调用滑动手势的动作方法


我知道有一种方法,但我想知道是否有一种简单的方法可以做到这一点。TIA以获取建议。

由于
UISweepGestureRecognitizer
是一种“离散”手势,识别时它只触发一个动作,不允许您检测手势的结束

因此,为了防止在手势过程中进行其他触摸,我建议改用
uipangestrerecognizer
,因为它可以从头到尾跟踪您的手势。然后,您可以尝试将手势的
cancelsTouchesInView
属性设置为YES,以取消在识别平移手势时在视图中发生的所有其他触摸,例如:

gesture.cancelsTouchesInView = YES;
gesture.delaysTouchesBegan = YES;

您的按钮应在视图中注册润色,以便在决定不继续操作时,点击按钮的人可以拖走


对于您的其他滑动手势,在滑动手势期间,您的按钮将不会在视图中注册润色,即使滑动经过按钮或结束于其上。

好的,这似乎有效。在手势识别器上,我使用了:

    UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeDown:)];
    swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
    swipeDown.delaysTouchesBegan = YES;
    swipeDown.delegate = self;
    [self addGestureRecognizer:swipeDown];

他们delaysTouchesBegan=YES允许它在将触摸传递到按钮之前确定是否发生了刷卡。所以,如果你滑动,它会调用滑动GR,如果你按下任何一个按钮,你就会得到它。感谢您的回答…

您使用的是UIWipegestureRecognitor还是UIPangestureRecognitor?(询问,如果您使用的是UIPangestureRecognitor,那么有一种非常简单的方法来实现这一点……如果它是UISweepgestureRecognitor,那么它会稍微复杂一些,因为它是一种离散的手势。)事实上,我有一个不同的建议。。。一秒钟…我很灵活。我可以很容易地换成pan,如果这能让其他代码更简单的话。事实上,我刚刚写了一个答案说使用
cancelsTouchesInView
,但是是的,我认为你需要使用
UIPangestureRecognitor
来实现这一点(或者我的其他建议)因为
UISWeepGestureRecognitizer
是一个离散的手势。我不太确定这是否正确,请重新:
cancelTouchesInView
,但您可以明确地禁用和重新启用UIPangestureRecognitizer开头和结尾的按钮,或者在平移过程中将按钮的手势识别器设置为失败。