视图UIView添加手势回调
UIView添加扩展处理
H文件
NS_ASSUME_NONNULL_BEGIN
typedef void(^KJGestureRecognizerBlock)(UIView *view, UIGestureRecognizer *gesture);
typedef NS_ENUM(NSUInteger, KJGestureType) {
KJGestureTypeTap, // 点击
KJGestureTypeDouble, // 双击
KJGestureTypeLongPress, // 长按
KJGestureTypeSwipe, // 轻扫
KJGestureTypePan, // 移动
KJGestureTypeRotate, // 旋转
KJGestureTypePinch, // 缩放
};
/// 枚举映射字符串
static NSString * const _Nonnull KJGestureTypeStringMap[] = {
[KJGestureTypeTap] = @"UITapGestureRecognizer",
[KJGestureTypeDouble] = @"UITapGestureRecognizer",
[KJGestureTypeLongPress] = @"UILongPressGestureRecognizer",
[KJGestureTypeSwipe] = @"UISwipeGestureRecognizer",
[KJGestureTypePan] = @"UIPanGestureRecognizer",
[KJGestureTypeRotate] = @"UIRotationGestureRecognizer",
[KJGestureTypePinch] = @"UIPinchGestureRecognizer",
};
@interface UIView (KJGestureBlock)
/*
[self.view kj_AddGestureRecognizer:KJGestureTypeTap block:^(UIView *view, UIGestureRecognizer *gesture) {
// example
[view removeGestureRecognizer:gesture];
}];
*/
- (UIGestureRecognizer*)kj_AddGestureRecognizer:(KJGestureType)type block:(KJGestureRecognizerBlock)block;
/// 单击手势
- (UIGestureRecognizer*)kj_AddTapGestureRecognizerBlock:(KJGestureRecognizerBlock)block;
@end
NS_ASSUME_NONNULL_END
M文件
#import "UIView+KJGestureBlock.h"
#import <objc/runtime.h>
@implementation UIView (KJGestureBlock)
- (KJGestureRecognizerBlock)gesrureblock{
return (KJGestureRecognizerBlock)objc_getAssociatedObject(self, @selector(gesrureblock));
}
- (void)setGesrureblock:(KJGestureRecognizerBlock)gesrureblock{
objc_setAssociatedObject(self, @selector(gesrureblock), gesrureblock, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
/// 单击手势
- (UIGestureRecognizer*)kj_AddTapGestureRecognizerBlock:(KJGestureRecognizerBlock)block{
return [self kj_AddGestureRecognizer:KJGestureTypeTap block:block];
}
- (UIGestureRecognizer*)kj_AddGestureRecognizer:(KJGestureType)type block:(KJGestureRecognizerBlock)block{
self.userInteractionEnabled = YES;
self.gesrureblock = block;
if (block) {
NSString *string = KJGestureTypeStringMap[type];
UIGestureRecognizer *gesture = [[NSClassFromString(string) alloc] initWithTarget:self action:@selector(kGestureAction:)];
[gesture setDelaysTouchesBegan:YES];
[self addGestureRecognizer:gesture];
if (type == KJGestureTypeDouble) {
((UITapGestureRecognizer*)gesture).numberOfTouchesRequired = 1;
((UITapGestureRecognizer*)gesture).numberOfTapsRequired = 2;
for (UIGestureRecognizer *recognizer in self.gestureRecognizers) {
if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) {
if (((UITapGestureRecognizer*)recognizer).numberOfTapsRequired == 1) {
[recognizer requireGestureRecognizerToFail:gesture];
}
}
}
}
return gesture;
}
return nil;
}
- (void)kGestureAction:(UIGestureRecognizer*)gesture{
if (self.gesrureblock) self.gesrureblock(gesture.view, gesture);
}
@end
简单使用
[self.testView kj_AddGestureRecognizer:(KJGestureTypeDouble) block:^(UIView * _Nonnull view, UIGestureRecognizer * _Nonnull gesture) {
NSLog(@"2222");
}];
备注:本文用到的部分函数方法和Demo,均来自三方库**KJExtensionHandler**,如有需要的朋友可自行pod 'KJExtensionHandler'
引入即可
视图UIView添加手势回调介绍就到此完毕,后面有相关再补充,写文章不容易,还请点个**小星星**传送门