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(00,

                              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(00,

                              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 allocinitWithFrame:CGRectMake(50.f50.f200.f200.f)];

    v1.backgroundColor = UIColor.redColor;

    [self.view addSubview:v1];

    

    //黄色视图接受点击事件

    TestView2 *v2 = [[TestView2 allocinitWithFrame:CGRectMake(0.f0.f100.f100.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值