【问题标题】:Gesture is not working when used on transparent UIView when subclassed to detect objects behind it当子类化以检测其背后的对象时,手势在透明 UIView 上使用时不起作用
【发布时间】:2013-08-03 14:09:20
【问题描述】:

大家好,

我在检测触摸时遇到了一些问题。请参考黄色和棕色是我的 UIView 的图像,它被子类化以检测透明触摸。我在 UIViews 上添加了三个手势识别器平移、点击和旋转,但是当我将 UIView 子类化并覆盖 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 方法以检测添加的所有 Imageviews 时,手势识别器停止在 ImageView 之外工作。如果我不使用子类,那么它无法检测到黄色 UIView 上的 ImageView 触摸。我尝试了此链接的解决方案

Forwarding UIGesture to views behind

虽然和我的要求不一样,但是没用!任何帮助/提示表示赞赏!提前致谢。

【问题讨论】:

  • 如果你想在UIImageView上获得触摸/手势,你需要设置它的属性userInteractionEnabled = YES
  • Amar,对于 UIViews 和 ImageViews userInteractionEnable 设置为 YES。
  • 所以你正在尝试检测黄色UIView上的触摸?
  • 当用户触摸其上的相应图像时,我想检测两个 UIView 的触摸。这已经通过覆盖 pointInside 实现了,但是现在手势对 UIView 的透明区域没有响应。
  • 请发布一些代码库..

标签: iphone ios ipad


【解决方案1】:

我自己解决了这个问题。我通过在 superview 上应用手势识别器来实现我的目标,而不是为每个 uiimageview 或彩色 uiviews 分开。我在 superview 上添加了 uiviews,现在手势也被应用于 imageview。并且还更改了手势操作中的代码,以便手势将应用于触摸的图像视图而不是超级视图。

【讨论】:

    【解决方案2】:

    我发现解决此问题的唯一方法是将您的视图堆栈作为子视图添加到 UIView (A)。它应该与您的透明视图/堆栈上的所有子视图大小相同。您应该在视图控制器中实现手势识别器 if 并将 (A) 连接为 iboutlet(例如,只需将手势识别器拖放到界面构建器中的 A 上)。

    (View Controller)
     |->(A)
         |->(1) Need gesture 
         |->(2) Need another gesture
         |->(3) Transparent (messing everything up)
    

    将手势处理程序连接到需要处理它们的 A 的适当子级。

    对于视图控制器

    @interface AUIViewController : UIViewController <bla, bla, UIGestureRecognizerDelegate >
    

    对于(1)

    - (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer{/*yada yada*/}
    

    在我看来,这是一个苹果错误。

    我的答案几乎是this,但它可以解决我认为的错误。

    P.S,对不起,我没有使用界面生成器来解决这个问题。希望它仍然有用

    【讨论】:

      【解决方案3】:

      尝试实现gestureRecognizer应该从你的子类开始,测试识别器的类是否是那些类[gestureRecognizer class] == [UITapGestureRecognizer class],如果是则返回yes。

      http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/gestureRecognizerShouldBegin:

      【讨论】:

      • 我尝试了你提到的方法,但它没有按我的意愿工作。
      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多