美文网首页
iOS点击事件穿透以及扩大视图的响应区域

iOS点击事件穿透以及扩大视图的响应区域

作者: 二猪哥 | 来源:发表于2019-02-26 22:02 被阅读0次

点击事件穿透:

有这样的需求:一个控件的某个部分被另外一个控件遮挡住,当点击这个重叠部分时,需要响应被遮盖控件的点击事件,就如下图所示: image.png

点击事件穿透指的是点击当前视图,但是实际上被选中的是其他视图。举个例子,上图效果图中有两个按钮,当点击不重合的地方,显示的是点击当前视图,当点击重合地方时,点击的是下方的视图。

如此效果,需要用到点击穿透事件:重写系统- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    CGPoint bluePoint = [self convertPoint:point toView:self.blueButton];
    if ([self.blueButton pointInside:bluePoint withEvent:event]) {
        return self.blueButton;
    }else {
        return [super hitTest:point withEvent:event];
    }
}

此时再点击重合的区域,响应的是A按钮的事件。

扩大视图的响应区域

image.png

扩大视图的响应区域指的是点击当前视图区域外的位置,仍然显示的是点击当前视图。举个例子,下方效果图中黄色部分是按钮,红色部分是按钮外的区域,但是点击红色部分,仍能显示点击黄色按钮。

扩大视图响应区域的本质是判断所点击的点是否在于你想要扩大的区域上。在这里,我所设置的扩大区域是边线外增加30。实现如下:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    CGFloat min_x = -30.0;
    CGFloat min_y = -30.0;
    CGFloat max_x = self.frame.size.width + 30;
    CGFloat max_y = self.frame.size.height + 30;
    
    if (point.x <= max_x && point.x >= min_x && point.y <= max_y && point.y >= min_y) {
        point = CGPointMake(0, 0);
        return [super hitTest:point withEvent:event];
    }else {
        return [super hitTest:point withEvent:event];
    }
    
}

相关文章

  • iOS点击事件穿透以及扩大视图的响应区域

    点击事件穿透: 点击事件穿透指的是点击当前视图,但是实际上被选中的是其他视图。举个例子,上图效果图中有两个按钮,当...

  • iOS点击事件穿透及扩大视图点击区域

    前言 点击事件穿透指的是点击当前视图,但是实际上被选中的是其他视图。举个例子,下方效果图中有两个按钮,当点击不重合...

  • 扩大视图点击区域

    导语 在工作中,经常创建一些视图(比如button),这时button很小,点击时,总感到不精准,有时我们会在这个...

  • 子视图超出父视图的部分视图响应事件的问题

    现在有一个问题,点击黄色子视图超出红色视图的区域的时候,事件没有响应。原因是事件传递默认是在红色父视图的坐标区域里...

  • iOS UI tips

    让超出父视图范围的子视图响应事件,在UIView范围外响应点击 iOS开发之适配iOS11让你的 UI 适配 iO...

  • iOS 点击穿透上层视图响应事件

    昨天被问到了一个问题,如下 一个子视图能不能透过上层视图来响应自己的点击事件?如果能,怎么实现? 这种题用脚想都是...

  • 2018年面试题

    1、页面上点击了某个视图,画出事件的响应链和传递链 2、视图上某块区域如何让其不响应点击 3、应用启动加速优化 4...

  • 增加点击区域

    项目中很多时候需要扩大点击(交互)区域,或子试图超出了父视图后,无法点击或交互等,我们可以通过响应者链-(UIVi...

  • iOS 事件穿透,点击穿透,控件不响应事件

    通过实例讲解,如图(三个深灰色按钮处于同一个contentView中): 悬浮的三个按钮下方有一个可以点击的灰色区...

  • iOS为UIButton扩大点击响应区域

    我们可以为UIButton建立一个Category,然后利用runtime的绑定属性,来扩大响应区域。先看一下.h...

网友评论

      本文标题:iOS点击事件穿透以及扩大视图的响应区域

      本文链接:https://www.haomeiwen.com/subject/gxzzyqtx.html