12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- //
- // UIView+BlocksKit.m
- // BlocksKit
- //
- #import "UIGestureRecognizer+BlocksKit.h"
- #import "UIView+BlocksKit.h"
- @implementation UIView (BlocksKit)
- - (void)bk_whenTouches:(NSUInteger)numberOfTouches tapped:(NSUInteger)numberOfTaps handler:(void (^)(void))block
- {
- if (!block) return;
-
- UITapGestureRecognizer *gesture = [UITapGestureRecognizer bk_recognizerWithHandler:^(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location) {
- if (state == UIGestureRecognizerStateRecognized) block();
- }];
-
- gesture.numberOfTouchesRequired = numberOfTouches;
- gesture.numberOfTapsRequired = numberOfTaps;
- [self.gestureRecognizers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
- if (![obj isKindOfClass:[UITapGestureRecognizer class]]) return;
- UITapGestureRecognizer *tap = obj;
- BOOL rightTouches = (tap.numberOfTouchesRequired == numberOfTouches);
- BOOL rightTaps = (tap.numberOfTapsRequired == numberOfTaps);
- if (rightTouches && rightTaps) {
- [gesture requireGestureRecognizerToFail:tap];
- }
- }];
- [self addGestureRecognizer:gesture];
- }
- - (void)bk_whenTapped:(void (^)(void))block
- {
- [self bk_whenTouches:1 tapped:1 handler:block];
- }
- - (void)bk_whenDoubleTapped:(void (^)(void))block
- {
- [self bk_whenTouches:2 tapped:1 handler:block];
- }
- - (void)bk_eachSubview:(void (^)(UIView *subview))block
- {
- NSParameterAssert(block != nil);
- [self.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
- block(subview);
- }];
- }
- @end
|