gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:34:02 25 4
gpt4 key购买 nike

我一直在为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com