美文网首页
iOS开发同时点击屏幕导致误触问题

iOS开发同时点击屏幕导致误触问题

作者: yycache | 来源:发表于2020-04-15 09:17 被阅读0次

    原理:

    利用UIView的UIViewGeometry分类中有这样的一个属性(exclusiveTouch).这个属性很简单,从翻译上看:独家接触

    那么它就一个作用,防止误触(同时点击).当然,它默认是NO,所以我们在开发中会有误触发生,只要我们设置为YES即可..

    使用例如:[button setExclusiveTouch:YES]; 或者button.exclusiveTouch = YES;

    项目中集中添加方案:

    由于不可能所有View都重新找一遍,挨个赋值,想到ios中的黑魔法为旧项目集中添加方案,给view写个分类来集中添加,具体实现如下:

    #import "UIView+MGPGUIView.h"

    #import

    @implementation UIView (MGPGUIView)

    + (void)load{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    SEL systemSel = @selector(addSubview:);

    SEL swizzSel = @selector(pggAddSubview:);

    Method systemMethod = class_getInstanceMethod([self class], systemSel);

    Method swizzMethod = class_getInstanceMethod([self class], swizzSel);

    BOOL isAdd = class_addMethod(self, systemSel, method_getImplementation(swizzMethod), method_getTypeEncoding(swizzMethod));

    if (isAdd) {

    class_replaceMethod(self, swizzSel, method_getImplementation(systemMethod), method_getTypeEncoding(systemMethod));

    }else{

    method_exchangeImplementations(systemMethod, swizzMethod);

    }

    });

    }

    - (void)pggAddSubview:(UIView *)view{

    if ([view respondsToSelector:@selector(setExclusiveTouch:)]) {

    [view setExclusiveTouch:YES];

    }

    [self pggAddSubview:view];

    }

    @end

    此方案能解决同时点击屏幕导致触发多次响应,而引起不必要的麻烦,使用之后 ,只会响应最快点击的那一个事件。

    相关文章

      网友评论

          本文标题:iOS开发同时点击屏幕导致误触问题

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