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...
  • Felicity294250051
  • Felicity294250051
  • 2016年01月10日 10:55
  • 1606

hitTest:withEvent:和pointInside:withEvent:

hitTest:withEvent:方法的处理流程如下: 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;若返回NO,则hitTest:withEv...
  • objectively
  • objectively
  • 2014年06月15日 13:56
  • 942

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

• 当用户点击屏幕时,会产生一个触摸事件,系统会将该事件加入到一个由UIApplication管理的事件队列中 • UIApplication会从事件队列中取出最前面的事件进行分发以便处理,通常,先...
  • conslee
  • conslee
  • 2015年04月24日 10:27
  • 1839

iOS 中 点击事件响应的方法hitTest与pointInside

当点击手机屏幕时,传感器会将响应传给系统,系统将响应事件放在事件队列中。 最终,传给响应的UIView, UiView 调用 -(id)hitTest:(CGPoint)point withEve...
  • bravegogo
  • bravegogo
  • 2014年02月25日 22:25
  • 1228

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

多层视图重叠跳过中间层,实现隔层视图事件响应   // //  DataViewController.m //  UIScrollViewPanGesture // ...
  • peacewanghp
  • peacewanghp
  • 2015年11月18日 14:48
  • 716

iOS点击响应 hitTest &amp; pointInside

  • 2014年02月25日 22:32
  • 33KB
  • 下载

hitTest:(CGPoint)point withEvent:(UIEvent *)event

UIView的hitTest:方法和pointInside:方法的实现 2015-03-31      0 个评论    来源:zhangping871的专栏    收藏    我要投...
  • kaplaSxiao
  • kaplaSxiao
  • 2016年01月20日 15:29
  • 2965

XMG 重写- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法

//重写这个方法,来完成一些指定的事件。比如说按钮被遮到下面了,但是我想让点击到这块区域的时候让按钮去相应点击 - (UIView *)hitTest:(CGPoint)point withEv...
  • u012131827
  • u012131827
  • 2016年05月04日 14:02
  • 1110

iOS hitTest与PointInside方法

作用:寻找最适合的View 参数:当前手指所在的点.产生的事件 返回值:返回谁, 谁就是最适合的View. 什么时候用调用:只要一个事件,传递给一个控件时, 就会调用这个控件的...
  • u010981736
  • u010981736
  • 2017年08月17日 16:58
  • 161

iOS编译过程的原理和应用

前言 一般可以将编程语言分为两种,编译语言和直译式语言。 像C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率...
  • Hello_Hwc
  • Hello_Hwc
  • 2016年12月10日 11:58
  • 16557
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS UIView事件隔层传递 pointInside:withEvent:
举报原因:
原因补充:

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