美文网首页
类目:将TapGesture封装成一个block

类目:将TapGesture封装成一个block

作者: LikeSmilence | 来源:发表于2016-08-10 18:02 被阅读21次

上代码.h文件

#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^MyTapGestureRecognizerBlock)();
@interface UIView (TapGestureRecognize)
/**
 *  可用来重新设置点击事件的方法
 */
@property (nonatomic, copy) MyTapGestureRecognizerBlock gestureBlock;
/**
 *  给视图添加一个点击事件
 *  @param action 实现点击事件的方法
 */
- (void)addGestureRecognizerAtction:(MyTapGestureRecognizerBlock __nonnull)action;
@end
NS_ASSUME_NONNULL_END

.m文件

#import "UIView+TapGestureRecognize.h"
#import <objc/runtime.h>
#import <objc/message.h>

@implementation UIView (TapGestureRecognize)

#pragma mark - 动态生成属性
static char gestureBlockKey;
@dynamic gestureBlock;

- (void)setGestureBlock:(MyTapGestureRecognizerBlock)gestureBlock {
    objc_setAssociatedObject(self, &gestureBlockKey, gestureBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (MyTapGestureRecognizerBlock)gestureBlock {
    return objc_getAssociatedObject(self, &gestureBlockKey);
}

#pragma mark - 实现功能方法
- (void)addGestureRecognizerAtction:(MyTapGestureRecognizerBlock)action {
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleMyTapGestureRecognizer)];
    [self addGestureRecognizer:tap];
    self.gestureBlock = action;
    self.userInteractionEnabled = YES;
}

- (void)handleMyTapGestureRecognizer {
    static double preClickTime = -1;
    double curClickTime = [[NSDate date] timeIntervalSince1970];
    if ((curClickTime - preClickTime) > 0.2) {
        self.gestureBlock();
    }
    preClickTime = curClickTime;
}
@end

相关文章

网友评论

      本文标题:类目:将TapGesture封装成一个block

      本文链接:https://www.haomeiwen.com/subject/exejsttx.html