标签:style blog http color io 使用 ar for sp
屏蔽响应事件继续向父视图传递的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
以下是需要注意的地方:
标签:style blog http color io 使用 ar for sp
原文地址:http://www.cnblogs.com/YouXianMing/p/4004738.html