首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅将hitTest逻辑用于touchesBegan而不是手势识别器

仅将hitTest逻辑用于touchesBegan而不是手势识别器
EN

Stack Overflow用户
提问于 2011-05-04 07:37:39
回答 2查看 2.3K关注 0票数 7

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

视图形状不规则,视图边框有时重叠,因此我在图片视图中实现了Ole Belgeman的UIImage+ColorAtPixel,并在主元素视图中重写了isPointInside方法。isPointInside调用图片视图中的方法,该方法在触点处检查alpha,如果触摸到透明部分,则返回NO。本质上,hitTest忽略了这个分支。

但是它的副作用是hitTest忽略了对透明部分的所有接触,旋转识别器只在非透明区域工作。对于一些大小太小的视图,不可能使用旋转姿态:

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

touchesBegan上检查透明性是有效的,但是当您触摸透明部分(它与另一个视图的非透明部分重叠)时,后者不会接收到触摸。

我就是搞不懂这个把戏..。

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-26 20:11:55

我会让拖动使用一个UIPanGestureRecognizer,这样当您的pan识别器考虑在透明区域中进行触摸时,您可以实现委托方法-gestureRecognizer:shouldReceiveTouch:来返回NO。保持未实现的状态,或者从旋转识别器返回YES以接收所有信息。

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

票数 1
EN

Stack Overflow用户

发布于 2011-05-08 23:27:20

尝试检查传递给pointInside:withEvent:当它来自手势识别器的UIEvent参数是否与从touchBegan/Moved/Ended调用时传递的参数不同。

如果它是不同的,那么我想这是解决你的问题。

只需在NSLog上放置一个断点或pointInside,以查看每种情况下的事件参数,并查看是否可以区分。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5880109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档