【问题标题】:hitTest based on center of UISegmentmentedControl returns UIToolbar基于 UISegmentedControl 中心的 hitTest 返回 UIToolbar
【发布时间】:2011-08-07 14:07:30
【问题描述】:

我正在尝试一些代码来探测 UI 以查看其结构。作为其中的一部分,我正在对嵌入在屏幕底部的 UIToolbar 中的 UISegmentedControl 进行 hitTest。我有这样的结构:

UIToolbar
    UISegmentedControl
        UISegment
        ...

我得到 UISegmentedControl 的中心并像这样点击测试:

UIView *view = // code which gets a reference to the UISegmentedControl.
frameInWindow = [view.window convertRect:view.frame fromView:view.superview];
CGPoint locationInWindow = CGPointMake(
                  frameInWindow.origin.x + 0.5 * frameInWindow.size.width,
                  frameInWindow.origin.y + 0.5 * frameInWindow.size.height);
UIView *target = [view.window hitTest:locationInWindow withEvent:nil];

我已经经历过很多次了,但我不明白为什么它将target 设置为 UIToolbar 而不是 UISegmentedControl。我本来期望目标是相同的控件。或者分段控件内的一些 UIView。

【问题讨论】:

  • 您是否尝试过可视化该点以确保它指向 UISegmentedControl 而不是 UIToolbar?
  • 是的,我已经排除了相关框架等的坐标,一切看起来都正确。

标签: objective-c ios hittest


【解决方案1】:

文档说:

"此方法忽略隐藏的、已禁用的视图对象 用户交互,或 alpha 水平小于 0.01。这种方法 在确定命中时不考虑视图的内容。 因此,即使指定的点在一个视图中,仍然可以返回一个视图 该视图内容的透明部分。”

是否启用了与您的分段控件的用户交互?

【讨论】:

  • 那是我研究过的。我用用户交互值丢弃了整个 UI 树。除用于每个按钮的标签和图像外,分段控件中的所有内容均已启用。 doco on hit test 说这应该不是问题,因为它只使用该属性作为是否处理控件子视图的指示符。
猜你喜欢
  • 2011-09-21
  • 2010-12-31
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多