objective-c - 仅对 touchesBegan 而非手势识别器使用 hitTest 逻辑

标签 objective-c ios

我一直在为 iOS 开发一个简单的游戏,其中涉及拖动和使用旋转以及其他手势识别器。拖动是通过 touchesBegan/Moved/Ended 和旋转实现的 - 通过识别器。

View 的形状不规则, View 边界有时会重叠,所以我实现了 Ole Belgeman 的 UIImage+ColorAtPixel在我的图片 View 中,并覆盖主元素 View 中的isPointInside 方法。 isPointInside 调用图片 View 中的方法,该方法检查触摸点的 alpha,如果透明部分已被触摸,则返回 NO。本质上,hitTest 会忽略此分支。

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

有没有办法以某种方式避免这个问题并为touchesBegan使用hitTest逻辑?我试图找出解决方案,但似乎 hitTest 在任何触摸处理之前都严格工作。

touchesBegan 检查透明度是可行的,但是当您触摸与另一个 View 的非透明部分重叠的透明部分时,后者不会接收到触摸。

我只是想不出这个窍门...

提前感谢您的帮助!

最佳答案

我会让拖动使用 UIPanGestureRecognizer , 这样你就可以实现委托(delegate)方法 -gestureRecognizer:shouldReceiveTouch:当您的平移识别器正在考虑透明区域中的触摸时返回 NO。保留它未实现或从您的旋转识别器返回 YES 以接收所有内容。

此外,对这两种 Action 使用手势识别器还有其他好处,比如能够使用 -requireGestureRecognizerToFail: 指定依赖项| .

关于objective-c - 仅对 touchesBegan 而非手势识别器使用 hitTest 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880109/

相关文章:

iphone - 使用适用于 iOS 的 OpenGL ES 绘制正方形

objective-c - 我如何检查 ALAsset 是一个图像。我如何从 ALAssetGroup 中分离图像(.png)文件

objective-c - Mac OS X 语音转文本 API。如何?

ios - 在 iOS/Objective C 下输入的日期和时间是 1 小时或休息日

iphone - 如何在iphone中获取pinchgesture的坐标

ios - 如何快速从POST请求中获取params值

objective-c - 一次或多次调用dispatch_async效率更高

objective-c - Objective C 版本的 unix "finger"命令

objective-c - 为什么这种类型转换不适用于自身?

objective-c - 在 UITableview 中加载数据问题