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

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

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

iOS中超出父视图的按钮点击事件响应处理_第1张图片
Simulator Screen Shot 2016年10月12日 下午3.23.12.png

然后,分析一下代码,这里主要说一下核心代码吧。在自定义的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中超出父视图的按钮点击事件响应处理)