被覆盖的 UIControl 或 UIView 如何知道在其上方结束的触摸事件?

Posted

技术标签:

【中文标题】被覆盖的 UIControl 或 UIView 如何知道在其上方结束的触摸事件?【英文标题】:How can a covered UIControl or UIView know about a touch event that ended above it? 【发布时间】:2009-08-21 13:21:17 【问题描述】:

我有一个 UIControl(或 UIView,不管哪个),它被另一个 UIControl 覆盖。另一个 UIControl 对触摸事件反应良好。但是,底层 UIControl 还需要了解触摸以及从用户的角度来看它是否真的“在上面”。覆盖的 UIControl 是部分透明的。

如何在底层 UIControl 上捕捉到这种触摸?

【问题讨论】:

【参考方案1】:

我认为有几种方法可以解决这个问题...

您可以将触摸事件传递给另一个控件...虽然我认为如果您将上视图移动到另一个视图上,这将不起作用?您可能需要进行实验。

更简单的方法可能是查看下部矩形是否包含接触点:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent*)event 
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self];
    if (CGRectContainsPoint(lowerView.frame, touchLocation)) 
        <doyourthing>

我不记得了,但您可能需要在两个视图之间转换视图坐标?!?或者您可以使用 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

询问视图本身

【讨论】:

以上是关于被覆盖的 UIControl 或 UIView 如何知道在其上方结束的触摸事件?的主要内容,如果未能解决你的问题,请参考以下文章

对 uicontrol 的 nextresponder 感到困惑

以编程方式将 UIView 更改为 UIControl 的实例 [关闭]

如何从另一个 UIView 类访问 UIControl 的值

通过点击它来改变 UIView/UIControl 的屏幕位置

如何忽略触摸事件并将它们传递给另一个子视图的 UIControl 对象?

在 UIControl 中覆盖 isEnabled 以仍然允许触摸