屏蔽响应事件继续向父视图传递的category

简介:

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

以下是需要注意的地方:

目录
相关文章
|
4月前
|
C# 数据安全/隐私保护
C# 窗体之间参数互相传递的两种方法与使用
C# 窗体之间参数互相传递的两种方法与使用
|
7月前
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
42 0
|
8月前
|
存储 缓存 小程序
小程序页面间有哪些传递数据的方法?
小程序页面间传递数据的方法
access模块学习--类,对象,事件,方法,设置焦点
access模块学习--类,对象,事件,方法,设置焦点
|
安全 JavaScript API
【笔记】用 window.postMessage 进行窗口之间的隐式信息传递
用 window.postMessage 进行窗口之间的隐式信息传递
282 0
|
Java API Kotlin
教你用更好的方式在Activity或Fragment之间传递以及返回数据
教你用更好的方式在Activity或Fragment之间传递以及返回数据
258 0
教你用更好的方式在Activity或Fragment之间传递以及返回数据
|
JavaScript
iview的table 组件展开事件能否绑定到其他事件上?看这里!
iview的table 组件展开事件能否绑定到其他事件上?看这里!
186 0
iview的table 组件展开事件能否绑定到其他事件上?看这里!
|
JavaScript 前端开发 API
|
JavaScript
element-ui中下拉command传递多参数事件封装
element-ui中下拉command传递多参数事件封装
445 0
element-ui中下拉command传递多参数事件封装
父组件异步请求到的数据,要在子组件显示
父组件异步请求到的数据,要在子组件显示(父传子,子传父)
父组件异步请求到的数据,要在子组件显示