iOS UIView事件隔层传递 pointInside:withEvent:

原创 2015年11月18日 14:48:04

多层视图重叠跳过中间层,实现隔层视图事件响应

 

//

//  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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS 【UIKit-事件产生与传送 练习(重写hitTest和pointInside方法)】

练习要求: 在下图中点击到绿色Button区域,Button响应(包括YellowView覆盖的绿色Button部分也是由绿色Button来响应)。点击YellowView部分(除覆盖绿色Butto...

iOS开发-事件传递与响应者链中的hitTest方法和pointInside方法

事件传递与响应者链是iOS开发中的重点基础知识,也是容易混淆的知识点。
  • Cehae
  • Cehae
  • 2016-10-15 12:56
  • 879

模拟UIView的hitTest:方法和pointInside:方法的实现

对于UIView 的两个方法的讲解: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event - (BOOL)pointInside...

对UIView的hitTest: withEvent: 方法的理解

- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event; - (BOOL)pointInsid...

IOS_UI_UIView层操作

  • 2015-05-24 17:58
  • 430B
  • 下载

hitTest和pointInside如何响应用户点击事件(刚刚)

处理机制 iOS事件处理,首先应该是找到能处理点击事件的视图,然后在找到的这个视图里处理这个点击事件。 处理原理如下: • 当用户点击屏幕时,会产生一个触摸事件,系统会将该事件加入到...

IOS UIView touch事件 详解

前面说过UIViewController,但是UIView也是在MVC中非常重要的一层 。正是因为UIView是Iphone下所有界面的基础,所以官方专门写了一个文档“View Programming...

IOS UIView touch事件 详解

前面说过UIViewController,但是UIView也是在MVC中非常重要的一层 。正是因为UIView是Iphone下所有界面的基础,所以官方专门写了一个文档“View Programming...

ios,swift 给控件(UIImageView,UIView,UILable)添加响应事件

给非Button控件添加点击事件(这里以imageview为例) 但是我们会发现这样不会调用我们的personInfo方法,那是因为我们没有打开UIImageView的交互功能 添加一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)