原理:
利用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
此方案能解决同时点击屏幕导致触发多次响应,而引起不必要的麻烦,使用之后 ,只会响应最快点击的那一个事件。
网友评论