iOS UIView事件隔层传递 pointInside:withEvent:
多层视图重叠跳过中间层,实现隔层视图事件响应
//
// DataViewController.m
// UIScrollViewPanGesture
//
// Created by Peace on 11/17/15.
// Copyright © 2015 Peace. All rights reserved.
//
#import "DataViewController.h"
@interface TestView1 : UIView
@end
@implementation TestView1
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGRect frame = CGRectMake(0, 0,
self.frame.size.width,
self.frame.size.height);
BOOL value = (CGRectContainsPoint(frame, point));
NSArray *views = [self subviews];
for (UIView *subview in views) {
value = (CGRectContainsPoint(subview.frame, point));
if (value) {
return value;
}
}
return NO;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"1:xxxx");
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"1:yyyy");
}
@end
@interface TestView2 : UIView
@end
@implementation TestView2
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGRect frame = CGRectMake(0, 0,
self.frame.size.width,
self.frame.size.height);
BOOL value = (CGRectContainsPoint(frame, point));
return value;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"2:xxxx");
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"2:yyyy");
}
@end
/*
* ViewController
*/
@interface DataViewController ()
@end
@implementation DataViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//白色视图接受点击事件
self.view.backgroundColor = [UIColor whiteColor];
//红色视图(****注:不接受点击事件****)
TestView1 *v1 = [[TestView1 alloc] initWithFrame:CGRectMake(50.f, 50.f, 200.f, 200.f)];
v1.backgroundColor = UIColor.redColor;
[self.view addSubview:v1];
//黄色视图接受点击事件
TestView2 *v2 = [[TestView2 alloc] initWithFrame:CGRectMake(0.f, 0.f, 100.f, 100.f)];
v2.backgroundColor = UIColor.yellowColor;
[v1 addSubview:v2];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"3:xxxx");
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"3:yyyy");
}
@end