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

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

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

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

iOS中超出父视图的按钮点击事件响应处理_第1张图片


然后,分析一下代码,这里主要说一下核心代码吧。在自定义的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。该方法就是在点击悬空按钮悬空部分时,判断该点上有没有响应的子视图,如果没有,就再判断一下该点是不是在点击的这个按钮的视图坐标范围内,是的话就把这个按钮视图返回。这样我们的点击事件就有反应了。



你可能感兴趣的:(IOS)