标签: hittest

UIView的.为什么在其父母的范围之外的子视图没有接触?

我有一个简单 - 琐碎的 - UIView父/子层次结构.一位家长(UIView).一个孩子(UIButton).父母边界小于孩子的边界,因此孩子的一部分延伸到其父母的边界框之外.

这就是问题:父母的bbox之外的孩子的那些部分没有接触到.只有在父级的bbox内点击才允许子按钮接收触摸.

有人可以建议修复/解决方法吗?

UPDATE

对于那些关注这个问题的人,这里是我实施的@Bastians最优秀答案的解决方案:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {

    BOOL isInside = [super pointInside:point withEvent:event];

    // identify the button view subclass
    UIButton *b = (UIButton *)[self viewWithTag:3232];
    CGPoint inButtonSpace = [self convertPoint:point toView:b];

    BOOL isInsideButton = [b pointInside:inButtonSpace withEvent:nil];

    if (isInsideButton) {

        return isInsideButton;

    } // if (YES == isInsideButton)

    return isInside;        
}
Run Code Online (Sandbox Code Playgroud)

uiview hittest ios

36
推荐指数
2
解决办法
9465
查看次数

优化DOM元素的本机命中测试(Chrome)

我有一个高度优化的JavaScript应用程序,一个高度交互的图形编辑器.我现在开始使用大量数据(图中数千种形状)对其进行分析(使用Chrome开发工具),并且我遇到了以前不寻常的性能瓶颈,即Hit Test.

| Self Time       | Total Time      | Activity            |
|-----------------|-----------------|---------------------|
| 3579 ms (67.5%) | 3579 ms (67.5%) | Rendering           |
| 3455 ms (65.2%) | 3455 ms (65.2%) |   Hit Test          | <- this one
|   78 ms  (1.5%) |   78 ms  (1.5%) |   Update Layer Tree |
|   40 ms  (0.8%) |   40 ms  (0.8%) |   Recalculate Style |
| 1343 ms (25.3%) | 1343 ms (25.3%) | Scripting           |
|  378 …
Run Code Online (Sandbox Code Playgroud)

javascript optimization hittest google-chrome-devtools

36
推荐指数
2
解决办法
1605
查看次数

_UIApplicationHandleEventFromQueueEvent中的意外nil窗口

我的一个旧应用程序不适用于iOS8.当我启动应用程序并尝试在任何地方点击屏幕时,我在控制台中收到此消息:

unexpected nil window in _UIApplicationHandleEventFromQueueEvent, 
_windowServerHitTestWindow: <UIWindow: 0x7fe4d3e52660; frame = (0 0; 320 568); 
opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fe4d3e2c450>; 
layer = <UIWindowLayer: 0x7fe4d3e86a10>>
Run Code Online (Sandbox Code Playgroud)

我正在使用旧式MainWindow.xib.在MainWindow.xib中是我的Window对象,以及UINavigationController,它也在其中定义了第一个View Controller.下图显示了连接到App Delegate的Outlets.

下面屏幕截图中的白色"视图"是UIWindow.右边的视图是UINavigationController(隐藏导航栏),其中定义了第一个ViewController.

在此输入图像描述

如何在不使用新项目从头开始重新创建整个应用程序的情况下解决此问题?

编辑:我刚刚发现有一个TINY条带,其中我的按钮实际上会收到他们的点击/点击.

我也注意到我的self.view.window是零.我如何确保设置?

在此输入图像描述

uiwindow hittest ios8

35
推荐指数
2
解决办法
3万
查看次数

如何测试点是否在2D整数坐标中的凸多边形内?

多边形作为Vector2I对象列表(2维,整数坐标)给出.如何测试给定点是否在内?我在网上找到的所有实现都失败了一些微不足道的反例.写一个正确的实现似乎很难.语言并不重要,因为我会自己移植它.

geometry polygon hittest

26
推荐指数
3
解决办法
4万
查看次数

命中测试SVG形状?

已经实现了SVG规范(Firefox等)部分的浏览器免费为我们进行了测试 - 如果我在SVG对象上附加了一个mousedown监听器,我会在点击形状时收到通知.这太棒了,特别是对于复杂的多边形形状.

我想知道是否有一种方法可以利用这个功能进行更多点击测试.我想知道给定的矩形是否与我的任何SVG形状相交.

例如,我向我的元素添加了3个复杂多边形.现在我想知道矩形(40,40,100,100)是否与它们中的任何一个相交.有没有人知道我怎么可能挂钩已经很好的命中测试支持,而不是自己添加所有这些代码?

谢谢

javascript svg hittest

26
推荐指数
2
解决办法
2万
查看次数

有效地检测仅触摸UIImageView的非透明像素

你如何才能有效地检测到a的非透明像素上的触摸UIImageView

考虑下面的图像,显​​示为UIImageView.目标是仅在触摸发生在图像的非透明(在这种情况下为黑色)区域时使手势识别器响应.

在此输入图像描述

思路

  • 覆盖hitTest:withEvent:或者pointInside:withEvent:,尽管这种方法可能非常低效,因为这些方法在触摸事件期间被多次调用.
  • 检查单个像素是否透明可能会产生意外结果,因为手指大于一个像素.检查命中点周围的像素圆形区域,或尝试找到朝向边缘的透明路径可能会更好.

奖金

  • 区分图像的外部和内部透明像素会很好.在该示例中,零内的透明像素也应被视为有效.
  • 如果图像有变换会发生什么?
  • 图像处理可以硬件加速吗?

iphone image-processing uiimageview hittest ios

24
推荐指数
2
解决办法
8978
查看次数

如何找到位于给定(X,Y)位置的DOM节点?(命中测试)

我有一个HTML文档中一个点的坐标(X,Y).如何确定那些坐标处的DOM节点?

一些想法:

  • 是否有一个我错过的DOM命中测试函数,它需要一个点(X,Y)并返回那里的DOM元素?
  • 有没有一种有效的方法来遍历DOM元素树来查找包含元素?由于绝对定位的元素,这似乎很棘手.
  • 有没有办法模拟给定(X,Y)位置的事件,以便浏览器最终创建一个具有指向该元素的指针的事件对象?

(背景:我将Qt的QWebView嵌入到本机应用程序中.我正在尝试根据鼠标结束的DOM节点改变Qt小部件提供的上下文菜单,但是Qt 4.5无法测试DOM元素,虽然这个功能来自4.6.所以我希望我可以将坐标放到Javascript中并使用DOM API进行命中测试.)

谢谢!

javascript qt dom hittest

22
推荐指数
1
解决办法
1万
查看次数

Hittest使用世界坐标中的SVG图像中的屏幕坐标

如何使用GDI +将鼠标坐标转换为世界坐标?或者使用GDI +绘制SVG形状的边界框(甚至更好)旧的skool区域?

无论如何.我一直在寻找SVG代码并找到:
http://development.mwcs.de/svgimage.html
这是第一个真正适用于SVG的Delphi组件,但我离题了.

该组件使用GDI +显示圆形,曲线等
.GDI +使用矩阵将世界坐标,旋转和扭曲转换为屏幕坐标.
这一部分我明白了.您使用矩阵乘法进行转换.

问题是
如果我将鼠标光标指向一个封闭的形状:

  1. 我从哪里获得矩阵将我的鼠标屏幕点转换为一个世界点,我可以在屏幕上绘制的圆圈中找到它?
    在所有这些GDI对象中有很多矩阵可供选择.
  2. 不要给我关于绘制到位图和测试光标下的魔法颜色的东西,这不是我正在寻找的东西.
  3. 如果存在一系列矩阵,我如何以正确的(倒置?)顺序遍历它们,以便我的屏幕坐标被正确引导到世界坐标?

换句话说
,从SVG图像读入的形状是基元被矩阵扭曲成屏幕坐标的基元.如何从屏幕坐标反转到我可以用来查看我是否在形状内的坐标.

请注意 我需要知道我
所处的形状.由于SVG图像的设置方式,每个形状都有一个id,我想用它来查看我用鼠标击中的区域.

编辑

另外

  1. 我可以在屏幕坐标中获得每个形状的边界矩形,这样我就可以检查我的鼠标坐标.
  2. 我可以获得一个旧的skool GDI区域,我可以在屏幕坐标中执行PtInRegion.

希望你能帮助我找到所有这些扭曲的路径:-).

delphi svg gdi+ hittest

17
推荐指数
1
解决办法
1774
查看次数

如何获得给予CGPoint的UIView?

我试图找到一种方法来获得特定的UIView给定a CGPoint.简而言之,我想做一个热门测试.

例如,我有一个UIView有很多子视图,其大小小于父级UIView.我想要做的是,当touchMoved事件发生时,检查触摸的子视图周围的其他子视图.为此,能够将a转换CGPoint为子视图会很好UIView.

我是Objective-C的新手.有没有好办法呢?任何建议都会非常有用.:)

objective-c touch uiview hittest ios

17
推荐指数
1
解决办法
7072
查看次数

WPF:如何使用透明画布和可点击的子画面进行叠加控制

我想制作一个自定义控件,用作叠加层.该控件应包含一些应该绘制的子控件,并且应该像往常一样可以单击.但控件中的其他所有内容都应该是透明的并且"可点击".

以下是我尝试实现此目的的方法......首先,我在将要放置叠加层的窗口中使用PreviewMouseDown\Up\Move事件.我希望这些事件"通过"我的自定义控件的透明部分,但停止在不透明(例如在我的按钮).其次,这是我的控件的xaml(root UserControl节点保持不变):

<Canvas Background="transparent" IsHitTestVisible="true">
     <Button Canvas.Left="384" Canvas.Top="34" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" IsHitTestVisible="True" />
     <TextBlock Canvas.Left="27" Canvas.Top="105" Height="36" Name="textBlock1" Text="TextBlock" Width="432" FontSize="24" IsHitTestVisible="False" Foreground="Red" FontWeight="Bold" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

但是,如果我将Canvas的IsHitTestVisible设置为false,则包括按钮在内的整个控件将变为"unhittable".如果将其设置为true,则所有隧道事件都将停止在自定义控件上,并且按钮将变为不可点击.

实现这种行为的正确方法是什么?是否可以在没有子画布画布(或任何其他面板)的情况下这样做?

wpf overlay custom-controls transparent hittest

14
推荐指数
1
解决办法
2万
查看次数