iOS 视图UIView添加手势回调

it2023-03-17  74

视图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添加手势回调介绍就到此完毕,后面有相关再补充,写文章不容易,还请点个**小星星**传送门

最新回复(0)