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

原理:

利用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开发同时点击屏幕导致误触问题)