cdts/xdts-ios 3/TreeHole/Code/Utility/ImagePicker/BlocksKit/UIKit/UIView+BlocksKit.m
2023-07-27 09:20:00 +08:00

57 lines
1.5 KiB
Objective-C

//
// UIView+BlocksKit.m
// BlocksKit
//
#import "UIView+BlocksKit.h"
#import "UIGestureRecognizer+BlocksKit.h"
@implementation UIView (BlocksKit)
- (void)bk_whenTouches:(NSUInteger)numberOfTouches tapped:(NSUInteger)numberOfTaps handler:(void (^)(UIGestureRecognizer *sender))block
{
if (!block) return;
UITapGestureRecognizer *gesture = [UITapGestureRecognizer bk_recognizerWithHandler:^(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location) {
block(sender);
}];
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.userInteractionEnabled = YES;
[self addGestureRecognizer:gesture];
}
- (void)bk_whenTapped:(void (^)(UIGestureRecognizer *sender))block
{
[self bk_whenTouches:1 tapped:1 handler:block];
}
- (void)bk_whenDoubleTapped:(void (^)(UIGestureRecognizer *sender))block
{
[self bk_whenTouches:1 tapped:2 handler:block];
}
- (void)bk_eachSubview:(void (^)(UIView *subview))block
{
NSParameterAssert(block != nil);
[self.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
block(subview);
}];
}
@end