Swift - 触摸事件响应机制(UiView事件传递)
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事件传递)的更多相关文章
- iOS-UIResponse之事件响应链及其事件传递
UIResponse之事件响应链及其事件传递 我们的App与用户进行交互,基本上是依赖于各种各样的事件.一个视图是一个事件响应者,可以处理点击等事件,而这些事件就是在UIResponder类中定义的. ...
- 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...
- Android MotionEvent事件响应机制
在android中,事件主要包括点击.长按.拖曳.滑动等操作,这些构成了Android的事件响应,总体来说,所有的事件都由如下三个部分作为基础构成: 按下(action_down),移动(action ...
- cocos2d-x 事件分发机制 ——加速计事件监听
加速计事件监听机制 在上一篇中介绍了cocos2d-x中的触摸事件机制,这篇来介绍下游戏中也常常常使用到的加速计事件,这些都是游戏中的常常要用到的. 移动设备上一个非常重要的输入源是设备的方向.大多数 ...
- cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析
(一) Android平台下: cocos2dx 版本3.2,先导入一个android工程,然后看下AndroidManifest.xml <application android:label= ...
- 理解点击屏幕的事件响应--->对- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法的理解
要理解这两个方法.先了解一下用户触摸屏幕后的事件传递过程. 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的su ...
- 理解点击屏幕的事件响应--->对UIView的hitTest: withEvent: 方法的理解
要理解这两个方法.先了解一下用户触摸屏幕后的事件传递过程. 当用户点击屏幕后,UIApplication 先响应事件,然后传递给UIWindow.如果window可以响应.就开始遍历window的su ...
- 浅谈Android中的事件分发机制
View事件分发机制的本质就是就是MotionEvent事件的分发过程,即MotionEvent产生后是怎样在View之间传递及处理的. 首先介绍一下什么是MotionEvent.所谓MotionEv ...
- 本以为精通Android事件分发机制,没想到被面试官问懵了
文章中出现的源码均基于8.0 前言 事件分发机制不仅仅是核心知识点更是难点,并且还是View的一大难题滑动冲突解决方法的理论基础,因此掌握好View的事件分发机制是十分重要的. 一.基本认识 1. 事 ...
随机推荐
- Linux进程同步机制
为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一定的同步机制保证进程之间不会自说自话而是有效的协同工作.比如在共享内存的通信方式中,两个或者多个进程都要对共享的内存进 ...
- C语言 格式化输出--%m.n
格式字符:格式字符用以指定输出项的数据类型和输出格式. ①d格式:用来输出十进制整数(int).有以下几种用法: %d:按整型数据的实际长度输出. %m.nd:m为指定的输出字段的宽度,n定义为实际输 ...
- 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句
MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...
- C++ STL 教程
C++ STL 教程在前面的章节中,我们已经学习了 C++ 模板的概念.C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的 ...
- PHPOffice下PHPWord生成Word2007(docx)使用方法
要正常使用,下载依赖包: PhpOffice/Common:https://github.com/PHPOffice/Common Zend/Escaper:https://github.com/ze ...
- perl 实现ascall 码转换
今天需要在perl中实现一个字母表, 总不能把26个字母一个一个写出来,于是查资料,可以利用ascii码转换把数字转换成对应的字母 chr函数可以利用ascii编码把数字转换成对应的字母 perl - ...
- 【Java 线程的深入研究2】常用函数说明
①sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行) ②join():指等待t线程终止. 使用方式. join是Thread类的一个方法,启动线程后直接调用, ...
- js中页面跳转(href)中文参数传输方式
编码: escape(参数); 解码: unescape(参数);
- 怎么将unbuntu Linux iOS 文件从U盘或者移动硬盘启动?用win32diskimager_cn
win32diskimager_cn 选择文件类型的时候选择*
- mysql数据库binary log中的事件到底是什么?
需求描述: 最近看mysql备份恢复的时候,基于时间点恢复,提到了binary log中存的是"事件" 那么到底什么是事件呢 概念解释: binary log中存的是事件(even ...