iOS 视图UIView添加手势回调

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值