美文网首页
点击区域扩大

点击区域扩大

作者: 口厄 | 来源:发表于2019-04-03 15:51 被阅读0次

之前有个需求,按钮很小会很难点到,于是就需要扩大点击区域,一个UIButton的分类和runtime能很好解决问题。

主要方法:

//各个方向扩大到相同大小,通过objc_setAssociatedObject关联到对象
- (void)setEnlargeEdge:(CGFloat) size {

    objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

    objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

    objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

    objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:size], OBJC_ASSOCIATION_COPY_NONATOMIC);

}

//可指定方向扩大,通过objc_setAssociatedObject关联到对象

- (void) setEnlargeEdgeWithTop:(CGFloat) top right:(CGFloat) right bottom:(CGFloat) bottom left:(CGFloat) left

{

    objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:top], OBJC_ASSOCIATION_COPY_NONATOMIC);

    objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:right], OBJC_ASSOCIATION_COPY_NONATOMIC);

    objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:bottom], OBJC_ASSOCIATION_COPY_NONATOMIC);

    objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:left], OBJC_ASSOCIATION_COPY_NONATOMIC);

}

//然后就是扩大区域了

- (CGRect) enlargedRect

{

    NSNumber* topEdge = objc_getAssociatedObject(self, &topNameKey);

    NSNumber* rightEdge = objc_getAssociatedObject(self, &rightNameKey);

    NSNumber* bottomEdge = objc_getAssociatedObject(self, &bottomNameKey);

    NSNumber* leftEdge = objc_getAssociatedObject(self, &leftNameKey);

    if(topEdge && rightEdge && bottomEdge && leftEdge)

    {

        return CGRectMake(self.bounds.origin.x - leftEdge.floatValue,

                          self.bounds.origin.y- topEdge.floatValue,

                          self.bounds.size.width+ leftEdge.floatValue+ rightEdge.floatValue,

                          self.bounds.size.height+ topEdge.floatValue+ bottomEdge.floatValue);

    }

    else

    {

        returnself.bounds;

    }

}

最后依然要考虑响应链的问题:

//点击的是这个区域,就响应button的事件

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

{

    CGRectrect = [selfenlargedRect];

    if (CGRectEqualToRect(rect, self.bounds))

    {

        return[superhitTest:pointwithEvent:event];

    }

    returnCGRectContainsPoint(rect, point) ?self:nil;

}

相关文章

  • 点击区域扩大

    之前有个需求,按钮很小会很难点到,于是就需要扩大点击区域,一个UIButton的分类和runtime能很好解决问题...

  • 扩大按钮点击区域

    参考自印第安的老斑鸠 参考了很多的文章,主要是有三个方法: 例如:按钮的大小是25pt * 25pt,想要的点击范...

  • 扩大视图点击区域

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

  • 扩大UIButton点击区域

    当设计图上的给出按钮尺寸较小,我们将对应的资源文件放入UIButton中,比如只有12x12pt,在真机调试中会发...

  • 扩大button点击区域

  • 扩大按钮点击区域

    思路:建一个UIbutton分类,结合runtime更改按钮点击响应区域 实现代码: .h //// UIButt...

  • 扩大UIButton的点击区域

    创建一个UIButton的类别添加到项目中 在需要扩大按钮的点击范围处调用 注意:按钮扩大的范围必须在父视图内,超...

  • iOS 扩大点击区域

    UIControl+OMTExtension.h UIControl+OMTExtension.m

  • UIButton扩大默认点击区域

    在iOS开发中,经常遇到按钮的点击区域太小,无法达到一个良好的交互效果,通过如下方式扩大点击区域:

  • 扩大Button的点击区域

    最近遇到一个需要提高用户体验的问题:APP很多地方需要上传图片,上传图片之后就需要删除图片,然后删除图片一般比较小...

网友评论

      本文标题:点击区域扩大

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