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. 事 ...
随机推荐
- r语言 技巧总结
1.table函数返回众数,再转为dataframe as.data.frame(table(x)) 2.使用which 返回数组下标 which(rs.list=="rs1008507&q ...
- ElasticSearch使用代码
package elasticsearch01; import static org.junit.Assert.*; import java.util.HashMap; import java.uti ...
- Java 构造方法的执行过程(猜测)
先说明一点,这篇帖子的内容都是我自己思考的结果,如有误,请务必及时告诉我,非常感谢. 起由: public class NewThread implements Runnable{ Thread t; ...
- e673. Getting Amount of Free Accelerated Image Memory
Images in accelerated memory are much faster to draw on the screen. However, accelerated memory is t ...
- linux -- Ubuntu 安装搜狗输入法
在Ubuntu Kylin系统中,默认安装搜狗拼音输入法,但是在原生Ubuntu系统中则不是.这可以理解,毕竟搜狗输入法的Linux版有Kylin团队的不小功劳.由于搜狗输入法确实比Linux系统下其 ...
- iOS多线程与网络开发之NSOperation
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- CentOS查看何人何时登陆用户
使用linux 的last命令: last命令列出的是/var/log 目录下的wtmp文件内容,这个文件存的是二进制内容,不可以直接用vi等文本边界软件打开.这样即使是root用户也不可能随随便便的 ...
- [转]oracle存储过程、声明变量、for循环
oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out ty ...
- HEVC compressGOP 接口
HEVC编码调用compressGOP()来实现一个GOPSize 图像序列的编码.在reference code里,真正做compressGOP编码之前,需要存GOPSize帧YUV在m_cList ...
- CSS3给页面打标签
我们经常会在页面的左上角或者右上角看到类似如图所示的标签,比如页面的链接(最常使用)等,下面我们就实现一个简单的标签 实现步骤是先做一个水平长条,使用CSS3的transform来实现旋转,如果是在左 ...