iOS中超出父视图的按钮点击事件响应处理

在iOS开发中会遇到一些设计样式,需要把按钮一部分悬空在父视图的上面,但是当我们点击该按钮时,超出了父视图的悬空部分不会响应该按钮的点击事件。

原理就是iOS的touch事件的相应是从最下方的父视图开始的,系统判断点击的坐标点上没有子视图,所以不再响应,该原理可参见之前写过的这篇文章,超出俯视图的点击响应原理

效果图如下,写评论这个按钮需要做处理。



然后,分析一下代码,这里主要说一下核心代码吧。在自定义的UIView视图类中,我们重写点击视图的方法,

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

{

    UIView * view = [super hitTest:point withEvent:event];

    if (view == nil) {

        // 转换坐标系

        CGPoint newPoint = [commentImageView convertPoint:point fromView:self];

        // 判断触摸点是否在button

        if (CGRectContainsPoint(commentImageView.bounds, newPoint)) {

            view = commentImageView;

        }

    }

    return view;

}

commentImageView是这悬空的按钮视图,这里用的是一个UIImageView,因为外包美工做的图Px大小有问题,不然肯定用的UIButton。该方法就是在点击悬空按钮悬空部分时,判断该点上有没有响应的子视图,如果没有,就再判断一下该点是不是在点击的这个按钮的视图坐标范围内,是的话就把这个按钮视图返回。这样我们的点击事件就有反应了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值