import UIKit

class FatherView: UIView {

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {

print("Detect Touch Event")

if (self.hidden == false) && (alpha > 0) {

for subview in subviews {

if CGRectContainsPoint(subview.frame, point) {

if subview.isKindOfClass(ChildView1) {

print("view 1")

return subview

}

if subview.isKindOfClass(ChildView2) {

print("view 2")

return subview

}

}

}

}

return nil

}

}

import UIKit

class ChildView1: UIView {}

import UIKit

class ChildView2: UIView {}

import UIKit

class ViewController: UIViewController {

let father = FatherView()

let child1 = ChildView1()

let child2 = ChildView2()

let child3 = ChildView2()

override func viewDidLoad() {

super.viewDidLoad()

father.frame = CGRectMake(0, 0, 100, 100)

child1.frame = CGRectMake(20, 20, 20, 20)

child2.frame = CGRectMake(120, 120, 120, 120)

child3.frame = CGRectMake(200, 200, 120, 120)

//        father.clipsToBounds = true

father.backgroundColor = UIColor.grayColor()

child1.backgroundColor = UIColor.redColor()

child2.backgroundColor = UIColor.blueColor()

child3.backgroundColor = UIColor.greenColor()

view.addSubview(father)

father.addSubview(child1)

father.addSubview(child2)

father.addSubview(child3)

child1.addGestureRecognizer(

UITapGestureRecognizer(target: self, action: #selector(touchTest1)))

child2.addGestureRecognizer(

UITapGestureRecognizer(target: self, action: #selector(touchTest2)))

child3.addGestureRecognizer(

UITapGestureRecognizer(target: self, action: #selector(touchTest3)))

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

}

func touchTest1() {

print("test 1\n")

}

func touchTest2() {

print("test 2\n")

}

func touchTest3() {

print("test 3\n")

}

}

Swift - 触摸事件响应机制(UiView事件传递)的更多相关文章

  1. iOS-UIResponse之事件响应链及其事件传递

    UIResponse之事件响应链及其事件传递 我们的App与用户进行交互,基本上是依赖于各种各样的事件.一个视图是一个事件响应者,可以处理点击等事件,而这些事件就是在UIResponder类中定义的. ...

  2. 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...

  3. Android MotionEvent事件响应机制

    在android中,事件主要包括点击.长按.拖曳.滑动等操作,这些构成了Android的事件响应,总体来说,所有的事件都由如下三个部分作为基础构成: 按下(action_down),移动(action ...

  4. cocos2d-x 事件分发机制 ——加速计事件监听

    加速计事件监听机制 在上一篇中介绍了cocos2d-x中的触摸事件机制,这篇来介绍下游戏中也常常常使用到的加速计事件,这些都是游戏中的常常要用到的. 移动设备上一个非常重要的输入源是设备的方向.大多数 ...

  5. cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析

    (一) Android平台下: cocos2dx 版本3.2,先导入一个android工程,然后看下AndroidManifest.xml <application android:label= ...

  6. 理解点击屏幕的事件响应--->对- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法的理解

    要理解这两个方法.先了解一下用户触摸屏幕后的事件传递过程. 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的su ...

  7. 理解点击屏幕的事件响应--->对UIView的hitTest: withEvent: 方法的理解

    要理解这两个方法.先了解一下用户触摸屏幕后的事件传递过程. 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的su ...

  8. 浅谈Android中的事件分发机制

    View事件分发机制的本质就是就是MotionEvent事件的分发过程,即MotionEvent产生后是怎样在View之间传递及处理的. 首先介绍一下什么是MotionEvent.所谓MotionEv ...

  9. 本以为精通Android事件分发机制,没想到被面试官问懵了

    文章中出现的源码均基于8.0 前言 事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的. 一.基本认识 1. 事 ...

随机推荐

  1. swiper中有视频时,滑动停止后视频停止播放

    我们经常能够看到在图片轮播中,穿插着视频的播放,如下图为淘宝的一个产品轮播图,放个视频能够让顾客对产品有个更全面的认识. 我们可以用swiper实现这个功能.用法就跟放图片一样,只是这里把图片换成视频 ...

  2. SQL Server 查询分析器键盘快捷方式

    下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...

  3. 231个javascript特效分享

    1.文本框焦点问题onBlur:当失去输入焦点后产生该事件onFocus:当输入获得焦点后,产生该文件Onchange:当文字值改变时,产生该事件Onselect:当文字加亮后,产生该文件 <i ...

  4. 数据库 Oracle数据库性能优化

    --在Oacle数据库涉及到全表扫描的SQL查询(top,count)中, --现场用户删除表中大部分数据,只保留1W条数据,但是查询仍然很慢,检查磁盘IO,发现磁盘IO不是很高 --经过分析Oacl ...

  5. C# 在Bitmap上绘制文字出现锯齿的问题

    解决锯齿问题主要是修改Graphics的属性 修复绘制图片锯齿问题可以修改 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiA ...

  6. e675. 翻转缓冲图像

    // To create a buffered image, see e666 创建缓冲图像 // Flip the image vertically AffineTransform tx = Aff ...

  7. MySQL无法远程连接解决方案

    1.查看/etc/mysql/my.cnf配置文件是否只允许本地连接 注释配置:#bind-address = 127.0.0.1,重启MySQL Server 2.防火墙(我用的是iptables) ...

  8. HGNC 数据库-人类基因组数据库

    HGNC 全称为HUGO Gene Nomenclature Committee, 叫做 HUGO基因命名委员会,负责对人类基因组上包括蛋白编码基因, ncRNA基因,甲基因和其他基因在内的所有基因提 ...

  9. Java调用FTP实例

    package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  10. Spring-DispatcherServlet说明

    使用spring MVC,配置DispatcherServlet是第一步. DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet. Dispatc ...