【问题标题】:Hit test on group on Subviews在子视图上对组进行命中测试
【发布时间】:2010-10-17 09:44:46
【问题描述】:

我有一个UIView 作为容器/持有者视图。在里面我有一组UIViews(图标)

把它想象成类似于 iPhone 的 SpringBoard——你有一个 SBIconListUIView 子类)和一组 SBIcons(也是 UIView 子类)

到目前为止,我的图标的每个图标都是可拖动的,但我在编写碰撞检测代码以检测拖动图标和另一个图标之间的碰撞时遇到问题。

到目前为止,我的基本设置是:我正在图标的touchesMoved 事件范围内编写命中测试代码。然后我“for”循环遍历容器视图的每个子视图(每个图标)并尝试CGRectContaninsPoint(currentSubviewFrame, touchPoint)currentSubviewFrame 是“for”循环当前循环中图标的框架。 touchPoint 是屏幕上触摸点的 x/y。

问题是因为代码是在容器子视图之一的范围内编写的,所以坐标似乎变得相对于子视图。 例如,touchPoint(全局)的坐标应该是 160,240(中心屏幕),但这个坐标是 NSLoged,比如 30,30。 (相对于 60x60 图标的中心) currentSubviewFramexywidthheight 的情况相同。

我应该提一下,这段代码必须写在子视图的touchesMoved事件范围内。

任何帮助将不胜感激。 在此先感谢:)

【问题讨论】:

    标签: iphone ios objective-c uiview


    【解决方案1】:

    看看这些用于在视图之间转换坐标的函数:

    - (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view
    - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
    

    您可以在所有子视图(除了您拖动的子视图)上使用-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 来确定是否存在冲突。

    【讨论】:

    • 啊,正是我需要的!谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多