博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
屏蔽响应事件继续向父视图传递的category
阅读量:6876 次
发布时间:2019-06-26

本文共 3086 字,大约阅读时间需要 10 分钟。

屏蔽响应事件继续向父视图传递的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 
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

以下是需要注意的地方:

转载地址:http://rnmfl.baihongyu.com/

你可能感兴趣的文章
形状的组合和图层的设置
查看>>
epoll使用详解(精髓)(转)
查看>>
Swift 控制流
查看>>
vs2005新建项目中没有ASP.NET WEB应用程序
查看>>
U盘安装Centos后拔除U盘无法启动问题解决方法
查看>>
在C#代码中应用Log4Net(五)将Log4Net正确地封装在自己的类库中并进行调用
查看>>
SACC 2018之人工智能篇:AI在不同企业场景下的应用和探索
查看>>
从“3Q大战”到腾讯致歉——杀毒软件市场的“相爱相杀”
查看>>
20年难有进步 DRAM延迟问题终于得到优化!
查看>>
数字化整合服务成主流:2017复合机市场盘点
查看>>
360金融更新招股书:前三季营收13.8亿 最快月底上市
查看>>
中国公布北京2022年冬奥会企业赞助有关增值税政策
查看>>
四川公安严厉打击盗油犯罪:2018年缴获被盗柴油逾27吨
查看>>
创新智慧矿山解决方案 广纳集团走绿色可持续发展之路
查看>>
中消协警示:有人打“保健品岁末答谢”等幌子行骗
查看>>
品牌不能忽视的数字资产——域名为何在今天依然重要?
查看>>
贴福字、集五福、沾福气!这才是“中国福“的最优雅打开姿势
查看>>
DT时代,大数据常用的软件工具有哪些?
查看>>
十一个关于Netty的经典问答:为何选择Netty?
查看>>
深入浅出 FlatBuffers 之 Schema
查看>>