UIView+BlocksKit.m 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //
  2. // UIView+BlocksKit.m
  3. // BlocksKit
  4. //
  5. #import "UIGestureRecognizer+BlocksKit.h"
  6. #import "UIView+BlocksKit.h"
  7. @implementation UIView (BlocksKit)
  8. - (void)bk_whenTouches:(NSUInteger)numberOfTouches tapped:(NSUInteger)numberOfTaps handler:(void (^)(void))block
  9. {
  10. if (!block) return;
  11. UITapGestureRecognizer *gesture = [UITapGestureRecognizer bk_recognizerWithHandler:^(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location) {
  12. if (state == UIGestureRecognizerStateRecognized) block();
  13. }];
  14. gesture.numberOfTouchesRequired = numberOfTouches;
  15. gesture.numberOfTapsRequired = numberOfTaps;
  16. [self.gestureRecognizers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  17. if (![obj isKindOfClass:[UITapGestureRecognizer class]]) return;
  18. UITapGestureRecognizer *tap = obj;
  19. BOOL rightTouches = (tap.numberOfTouchesRequired == numberOfTouches);
  20. BOOL rightTaps = (tap.numberOfTapsRequired == numberOfTaps);
  21. if (rightTouches && rightTaps) {
  22. [gesture requireGestureRecognizerToFail:tap];
  23. }
  24. }];
  25. [self addGestureRecognizer:gesture];
  26. }
  27. - (void)bk_whenTapped:(void (^)(void))block
  28. {
  29. [self bk_whenTouches:1 tapped:1 handler:block];
  30. }
  31. - (void)bk_whenDoubleTapped:(void (^)(void))block
  32. {
  33. [self bk_whenTouches:2 tapped:1 handler:block];
  34. }
  35. - (void)bk_eachSubview:(void (^)(UIView *subview))block
  36. {
  37. NSParameterAssert(block != nil);
  38. [self.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
  39. block(subview);
  40. }];
  41. }
  42. @end