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