123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- //
- // UIGestureRecognizer+YYAdd.m
- // YYKit <https://github.com/ibireme/YYKit>
- //
- // Created by ibireme on 13/10/13.
- // Copyright (c) 2015 ibireme.
- //
- // This source code is licensed under the MIT-style license found in the
- // LICENSE file in the root directory of this source tree.
- //
- #import "UIGestureRecognizer+YYAdd.h"
- #import "YYKitMacro.h"
- #import <objc/runtime.h>
- static const int block_key;
- @interface _YYUIGestureRecognizerBlockTarget : NSObject
- @property (nonatomic, copy) void (^block)(id sender);
- - (id)initWithBlock:(void (^)(id sender))block;
- - (void)invoke:(id)sender;
- @end
- @implementation _YYUIGestureRecognizerBlockTarget
- - (id)initWithBlock:(void (^)(id sender))block{
- self = [super init];
- if (self) {
- _block = [block copy];
- }
- return self;
- }
- - (void)invoke:(id)sender {
- if (_block) _block(sender);
- }
- @end
- @implementation UIGestureRecognizer (YYAdd)
- - (instancetype)initWithActionBlock:(void (^)(id sender))block {
- self = [self init];
- [self addActionBlock:block];
- return self;
- }
- - (void)addActionBlock:(void (^)(id sender))block {
- _YYUIGestureRecognizerBlockTarget *target = [[_YYUIGestureRecognizerBlockTarget alloc] initWithBlock:block];
- [self addTarget:target action:@selector(invoke:)];
- NSMutableArray *targets = [self _yy_allUIGestureRecognizerBlockTargets];
- [targets addObject:target];
- }
- - (void)removeAllActionBlocks{
- NSMutableArray *targets = [self _yy_allUIGestureRecognizerBlockTargets];
- [targets enumerateObjectsUsingBlock:^(id target, NSUInteger idx, BOOL *stop) {
- [self removeTarget:target action:@selector(invoke:)];
- }];
- [targets removeAllObjects];
- }
- - (NSMutableArray *)_yy_allUIGestureRecognizerBlockTargets {
- NSMutableArray *targets = objc_getAssociatedObject(self, &block_key);
- if (!targets) {
- targets = [NSMutableArray array];
- objc_setAssociatedObject(self, &block_key, targets, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- return targets;
- }
- @end
|