屏蔽响应事件继续向父视图传递的category
这篇教程是上一篇教程的升级版,将复杂的代码封装成了category,更便于使用:)
效果:
源码:
UIGestureRecognizer+EnvetInCurrentView.h 与 UIGestureRecognizer+EnvetInCurrentView.m
//
// UIGestureRecognizer+EnvetInCurrentView.h
// BackgroundView
//
// Created by YouXianMing on 14-10-3.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
//
#import <UIKit/UIKit.h>
typedef void (^CurrentViewBlock)(UIGestureRecognizer *gesture);
typedef void (^OtherViewBlock)(UIGestureRecognizer *gesture);
@interface UIGestureRecognizer (EnvetInCurrentView)
- (void)eventInCurrentView:(CurrentViewBlock)currentViewBlock
inOtherView:(OtherViewBlock)otherViewBlock;
@end
//
// UIGestureRecognizer+EnvetInCurrentView.m
// BackgroundView
//
// Created by YouXianMing on 14-10-3.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
//
#import "UIGestureRecognizer+EnvetInCurrentView.h"
@implementation UIGestureRecognizer (EnvetInCurrentView)
- (void)eventInCurrentView:(CurrentViewBlock)currentViewBlock
inOtherView:(OtherViewBlock)otherViewBlock
{
UIEvent *event = [[UIEvent alloc] init];
CGPoint location = [self locationInView:self.view];
//check actually view you hit via hitTest
UIView *view = [self.view hitTest:location withEvent:event];
if ([view.gestureRecognizers containsObject:self]) {
currentViewBlock(self);
} else {
otherViewBlock(self);
}
}
@end
使用时候的源码:
//
// ViewController.m
// BackgroundView
//
// Created by YouXianMing on 14-10-3.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
//
#import "ViewController.h"
#import "UIView+BackgroundView.h"
#import "UIGestureRecognizer+EnvetInCurrentView.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 添加手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:tap];
UILabel *label = [[UILabel alloc] initWithFrame:self.view.bounds];
label.text = @"Y.X. Touch Test";
label.textAlignment = NSTextAlignmentCenter;
label.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:40.f];
label.textColor = [UIColor redColor];
[self.view addSubview:label];
}
- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer
{
[gestureRecognizer eventInCurrentView:^(UIGestureRecognizer *gesture) {
NSLog(@"当前视图事件");
// 显示
[self.view showBackgroundViewAndConfig:^(BackgroundView *configView) {
configView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
configView.startDuration = 0.4f;
configView.endDuration = 0.4f;
}];
// 延迟3s执行
[self performSelector:@selector(affterDelay)
withObject:nil
afterDelay:3.f];
} inOtherView:^(UIGestureRecognizer *gesture) {
NSLog(@"其他视图的事件");
}];
}
- (void)affterDelay
{
// 隐藏
[self.view removeBackgroundView];
}
@end
以下是需要注意的地方:
时间: 2024-12-10 22:49:47