首页 > 代码库 > 屏蔽响应事件继续向父视图传递的category
屏蔽响应事件继续向父视图传递的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
以下是需要注意的地方:
屏蔽响应事件继续向父视图传递的category
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。