ios - UIPanGestureRecognizer 顶级 View 未获取事件, subview 使用它们

标签 ios objective-c uiview uipangesturerecognizer uitapgesturerecognizer

在顶级 UIView 上使用 UIPanGestureRecognizer 和 UITapGestureRecognizer。

Interface Builder 中的设置:

  • ViewController(我们的主视图 Controller )
  • UIView(我们的主视图并连接到我们的 UIViewController
  • 我们的核心 UIView 有一个名为“Block”的 subview ,它只是一个 UIView
  • Block View 有 4 个 subview ( subview ),每个都是 UIButton 的一个实例。
  • UIButton 将其Touch Up Inside 事件连接到 UIViewController。
  • UIView(我们的主要顶级 UIView)有一个 UIPanGestureRecognizer 和一个 UITapGestureRecognizer

这是我们试图完成的场景(也称为行为):

  1. 用户点击一个按钮(一个单元格)。
  2. 该按钮会将其状态从“正常”更改为“已选择”。 (这很好用,代码也很简单)
  3. 对于选定的项目,用户可以将手指放在屏幕上的任意位置并向上或向下移动

问题:

  • 需要知道平移何时停止。
  • 顶部 UIView 没有收到表示已结束的手势。
  • UIView 没有收到 touchesEnded 事件。

您如何知道用户何时抬起手指?假设我在手指悬停在 UIButton 上时开始平移,而平移发生时,UIButton 吃掉触摸开始和结束事件。因此,您无法知道用户何时停止在 iPhone/iPad 玻璃上移动手指。

最佳答案

首先在您的 View Controller 中实现 UIGestureRecognizerDelegate。 然后将手势识别器上的委托(delegate)设置为 self 并实现以下方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
 return YES;
}

您的目标方法应如下所示:

-(void)gestureRegognized:(UIGestureRecognizer*)gestureRecognizer
{
 if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]])
 {
   //check its state
   if(gestureRecognizer.state==UIGestureRecognizerStateBegan)
   {
     // add your code here
   }
   else if(gestureRecognizer.state==UIGestureRecognizerStateEnded)
   {
     // pan gesture ended code goes here
   }

 }
 else if([gestureRecognizer isMemberOfClass:[UITapGestureRecognizer class]])
 {
   if(gestureRecognizer.state!=UIGestureRecognizerStateFailed)
   {   
     // tap gesture detected
   }
 }
}

关于ios - UIPanGestureRecognizer 顶级 View 未获取事件, subview 使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23543213/

相关文章:

ios - 为设备构建应用程序;想要终止进程然后能够重新启动它以便我可以在 Xcode 中看到 NSLog 消息

objective-c - 如何获取给定路径的文件大小?

ios - NSHTTPCookie 保存错误

ios - UIView边框覆盖 subview ?

ios - hantepay 支付方式在 ionic 中实现

ios - 由于着色器警告和编译器因 XPC_ERROR_CONNECTION_INTERRUPTED 而失败,Unity 应用程序无法在 iOS 上运行

objective-c - 使用 NSFontPanel 在运行时更改 NSTableView 的字体、字体颜色和背景颜色?

ios - 约束动画不正确

ios - animateWithDuration 一个接一个

ios - 确定用户是在室内还是室外?