借助“响应链”解决实际问题

场景一:增加图片按钮的响应区域

自定义按钮继承自UIButton,重写pointInside来扩大控件的响应区域。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    // 按钮中心点坐标
    float centerX = self.bounds.size.width / 2;
    float centerY = self.bounds.size.height / 2;

    // 点击位置坐标
    float pointX = point.x;
    float pointY = point.y;

    // 分别获取点击位置坐标X、Y与按钮中心坐标距离
    float dltX = fabsf(pointX - centerX);
    float dltY = fabsf(pointY - centerY);

    float width = self.frame.size.width;
    float height = self.frame.size.height;
    
    //在控件大小基础上,四周扩大10像素,来增加响应区域
    return dltX<=width/2 + 10 &&dltY<=height/2 + 10;
}

这样即使点击区域不在按钮上面,但是距离按钮边缘没有超过10像素,按钮仍然会认为当前碰触的屏幕坐标是在按钮控件当中,因此按钮可以成为此次操作的响应者来响应点击事件,这样就可以实现增大热区的效果。

场景二:若子视图超出父视图,超出部分也可以成为响应者

自定义UIView,重写hitTest方法

- (UIVi

你可能感兴趣的:(iOS,And,More~,ios)