仅对touchesBegan和NOT手势识别器使用hitTest逻辑

iva*_*lev 7 objective-c ios

我一直在为iOS开发一个简单的游戏,包括拖动和使用旋转和其他手势识别器.touchesBegan/Moved/Ended通过识别器实现拖动和旋转.

视图形状不规则,视图边框有时会重叠,所以我在我的图片视图中实现了Ole Belgeman的UIImage + ColorAtPixel,并在主元素视图中实现了overrode 方法.isPointInside调用图片视图中的方法,该方法在触摸点检查alpha,如果触摸了透明部分则返回NO.基本上,忽略这个分支.isPointInsidehitTest

但它的副作用是hitTest忽略透明部分的所有触摸,旋转识别器仅适用于非透明区域.对于一些尺寸太小的视图,无法使用旋转手势:(

有没有办法以某种方式避免此问题,使用hitTest逻辑touchesBegan?我试图解决这个问题,但似乎hitTest在任何触摸处理之前都是严格的.

检查工作中的透明度touchesBegan,但是当您触摸与另一个视图的非透明部分重叠的透明部分时,后者不会接收到触摸.

我只是无法弄清楚这个伎俩......

预先感谢您的任何帮助!

Jus*_*ers 1

我将使拖动使用UIPanGestureRecognizer,以便您可以实现委托方法-gestureRecognizer:shouldReceiveTouch:NO当您的平移识别器考虑透明区域中的触摸时返回。YES将其保留为未实现或从旋转识别器返回以接收所有内容。

此外,对这两种操作使用手势识别器还有其他好处,例如能够使用-requireGestureRecognizerToFail:指定依赖项。