美文网首页乔帮主的遗产
iOS如何修改view的响应范围

iOS如何修改view的响应范围

作者: 雪中夜归人 | 来源:发表于2017-03-17 17:20 被阅读318次

       工作中总是会遇到需要按钮的点击范围比实际的fram大的情况,原来一般都是在上边添加一个范围更大的按钮,这样确实能够实现效果,但是每次都这样写会很low。
       最近细细研究这块终于发现可以重写view的

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

的这个方法就可以实现。其实这个方法就是传个你点击的点 然后你去判断这个点是否在视图上。

下边直接贴上自己写的uiview的拓展类

@interface UIView (ChangeScope)

- (void)changeViewScope:(UIEdgeInsets)changeInsets;

@end

#import "UIView+ChangeScope.h"

#import <objc/runtime.h>

@implementation UIView (ChangeScope)

static char *changeScopeKey;

- (void)setChangeScope:(NSString *)changeScope
{
    objc_setAssociatedObject(self, &changeScopeKey, changeScope, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)changeScope
{
    return objc_getAssociatedObject(self, &changeScopeKey);
}

- (void)changeViewScope:(UIEdgeInsets)changeInsets
{
     self.changeScope = NSStringFromUIEdgeInsets(changeInsets);
}

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
     UIEdgeInsets changeInsets = UIEdgeInsetsFromString(self.changeScope);
      if (changeInsets.left != 0 || changeInsets.top != 0 || changeInsets.right != 0 || changeInsets.bottom != 0) {
          CGRect myBounds = self.bounds;
          myBounds.origin.x = myBounds.origin.x + changeInsets.left;
          myBounds.origin.y = myBounds.origin.y + changeInsets.top;
          myBounds.size.width = myBounds.size.width - changeInsets.left - changeInsets.right;
          myBounds.size.height = myBounds.size.height - changeInsets.top - changeInsets.bottom;
         return CGRectContainsPoint(myBounds, point);
      } else {
        return CGRectContainsPoint(self.bounds,point);
     }
}
@end

相关文章

  • iOS如何修改view的响应范围

    工作中总是会遇到需要按钮的点击范围比实际的fram大的情况,原来一般都是在上边添加一个范围更大的按钮,这样确实能够...

  • 响应链

    iOS事件响应链中Hit-Test View的应用从iOS的事件响应链看TableView为什么不响应touche...

  • 浅谈 iOS 事件的传递和响应过程

    问题 iOS 中 View 的事件到底是怎么传递和响应的? 为什么 父View 关闭了事件响应时,子View 就无...

  • dataBinding原理

    dataBinding如何绑定View? dataBinding如何修改View?

  • MVC, MVP, MVVM记要

    iOS的MVC各层职责 controller层(VC):生成view,然后组装view响应View的事件和作为vi...

  • iOS UI tips

    让超出父视图范围的子视图响应事件,在UIView范围外响应点击 iOS开发之适配iOS11让你的 UI 适配 iO...

  • iOS 事件的响应和传递

    (Window -- View)由上而下传递 (View -- Window)由下而上响应 如何找到第一响应者 U...

  • 解决Xcode9 导航栏左右图标偏移问题

    1.解决偏移问题:[objc] view plain copy 2.解决响应事件的触发范围:[objc] view...

  • iOS 事件的传递和响应机制

    简单分享一下iOS开发中事件在view之间如何传递,如何响应事件,如有错误,请大家指正。 一、事件的产生 应用外层...

  • iOS点击响应的控制

    第一种:一个view的子控件部分在view的范围外,要点击响应范围外的这部分要用到: 第二种:一个view点击的时...

网友评论

    本文标题:iOS如何修改view的响应范围

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