美文网首页
扩大视图点击区域

扩大视图点击区域

作者: 快乐的小梁同学 | 来源:发表于2016-04-26 17:39 被阅读163次

导语


在工作中,经常创建一些视图(比如button),这时button很小,点击时,总感到不精准,有时我们会在这个小button上放一个大一点的透明button。但是有没有好烦燥呀。

分类介入UIView+ExtendTouchRect

写这个分类,是受到一篇blog的启发。在这里感谢他的作者,作者名我忘记了。
分类写好后,一行代码解决问题

使用代码

self.button.touchExtendInset = UIEdgeInsetsMake(-10, -10, -10, -10)

实现代码如下

void Swizzle(Class c, SEL orig, SEL new) { Method origMethod = class_getInstanceMethod(c, orig); Method newMethod = class_getInstanceMethod(c, new); if (class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))){ class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); } else { method_exchangeImplementations(origMethod, newMethod); } }
@implementation UIView (ExtendTouchRect)
+ (void)load { Swizzle(self, @selector(pointInside:withEvent:), @selector(myPointInside:withEvent:)); }
- (BOOL)myPointInside:(CGPoint)point withEvent:(UIEvent *)event { if (UIEdgeInsetsEqualToEdgeInsets(self.touchExtendInset, UIEdgeInsetsZero) || self.hidden || ([self isKindOfClass:UIControl.class] && !((UIControl *)self).enabled)) { return [self myPointInside:point withEvent:event]; // original implementation } CGRect hitFrame = UIEdgeInsetsInsetRect(self.bounds, self.touchExtendInset); hitFrame.size.width = MAX(hitFrame.size.width, 0); // don't allow negative sizes hitFrame.size.height = MAX(hitFrame.size.height, 0); return CGRectContainsPoint(hitFrame, point); }
static char touchExtendInsetKey;
- (void)setTouchExtendInset:(UIEdgeInsets)touchExtendInset { objc_setAssociatedObject(self, &touchExtendInsetKey, [NSValue valueWithUIEdgeInsets:touchExtendInset], OBJC_ASSOCIATION_RETAIN); }
- (UIEdgeInsets)touchExtendInset { return [objc_getAssociatedObject(self, &touchExtendInsetKey) UIEdgeInsetsValue]; }
@end

相关文章

  • 扩大视图点击区域

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

  • 点击区域扩大

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

  • iOS点击事件穿透及扩大视图点击区域

    前言 点击事件穿透指的是点击当前视图,但是实际上被选中的是其他视图。举个例子,下方效果图中有两个按钮,当点击不重合...

  • 扩大按钮点击区域

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

  • 扩大UIButton点击区域

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

  • 扩大button点击区域

  • 扩大按钮点击区域

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

  • IOS 一行代码扩大视图点击区域

    实现代码如下:

  • 增加点击区域

    项目中很多时候需要扩大点击(交互)区域,或子试图超出了父视图后,无法点击或交互等,我们可以通过响应者链-(UIVi...

  • 扩大UIButton的点击区域

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

网友评论

      本文标题:扩大视图点击区域

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