常见的事件传递

事件响应与传递

UIResponder

1.首先要找到在链状结构中,最为适合处理事件相应的组件,如果该组件对事件进行到了处理,那么该事件传递(告一段路),如果最为适合相应该事件的组件没有重写(UIResponder方法),那么他会想回找第二适合处理用户相应事件的组件,如果在一个链状结构中没有任何一个组件处理用户的触控事件,那么该事件将被丢弃

UIApplication-Appdelgate->UIWindow->UIViewController->(UIView默认视图)->GPGreenView(UIResponder)

UIApplication-Appdelgate->UIWindow->UIViewController->(UIView默认视图)->//GPGreenView(UIResponder)->(redView)



一旦用户触摸到了屏幕,就会立即执行touchesBegan

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

-----------------------------

例 touchesBegan:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

//UITouch 用户的手指,用户手指触控到屏幕,系统就会自动创建一个UITouch对象,并且在内部记录下来用户,触控的位置

//UITouch对象被存储在 touches 中

UITouch * touch = [touches anyObject];

//参考当前(自己)视图的坐标系,用户的触控位置应该在哪里

CGPoint currentPoint = [touch locationInView:self];

NSLog(@"point %@",NSStringFromCGPoint(currentPoint));

NSLog(@"%@ %@,%@",_name,NSStringFromClass([self class]),NSStringFromSelector(_cmd));

}

-----------------------------

只要用户触控发生移动,就会立即调用

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

-----------------------------

例 touchesMoved:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

NSLog(@"%@ %@,%@",_name,NSStringFromClass([self class]),NSStringFromSelector(_cmd));

//touchesMoved 方法中

//1.可以获得手指当前坐标位置

//2.可以获得移动之前的一个位置

UITouch * touch = [touches anyObject];

CGPoint  currentPoint = [touch locationInView:self];

CGPoint  prePoint = [touch previousLocationInView:self];

NSLog(@"currentpoint %@,prePoint %@",NSStringFromCGPoint(currentPoint),NSStringFromCGPoint(prePoint));

跟随操作

//1.手指在屏幕上移动的差值

//2.让Frame,x,y坐标增加差值范围

//3.更新Frame

CGRect rect = self.frame;

rect.origin.x += currentPoint.x - prePoint.x;

rect.origin.y += currentPoint.y - prePoint.y;

}

----------------------------------

用户手指离开屏幕,就会立即触发

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

如果用户的操作,被系统功能打断的时候会触发,来电话

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

时间: 2024-10-06 10:31:53

常见的事件传递的相关文章

QT父子窗口事件传递与事件过滤器(讲了一些原理,比较清楚)

处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现了事件方法,就直接处理掉事件了,没有进到MainWidget的处理方法中去,如果子Widget没有accept或ignore该事件,则该事件就会被传递给其父亲,在子Widget存在accept或ignore事件的时候,想要经过一下MainWidget的处理方法,就得用到事件处理器,因此网上找了一下,

android中的事件传递和处理机制

一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下.现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难.总之,不要自己打击自己,要相信自己能掌握这块知识.好了,下面是我今天的收获,希望也 能对你有一点帮助. 一.拟人化来理解android中的事件机制 其实android中的事件传递与处理机制跟我们生活中的事件处理是一样的.这里有一个生活中的例子,很能说明这个问题.阐述如下: 你是一个公司的员工,你的上头有一个主管,主管上头呢还有一个经

深入理解 View 的事件传递机制

引言:现在 GitHub 上酷炫的 Android 控件越来越多,一方面我们可以让 App 各美观,另一方面我们这些开发者也可以从中学习到各种知识.写下这篇博文主要是记录研究自定义控件源码过程中接触到的知识盲区,帮助自己巩固知识的同时,也和大家交流学习,一起进步. Demo源码 废话不多说,进入正题: 一.概述 View 事件传递机制 用户通过点击.滑动屏幕与 App 产生交互是移动互联网时代的交互基础,那么在 Android 中,用户的点击.滑动是怎么和 Android 系统产生交互的呢? 在

Android好奇宝宝_08_乱侃触摸事件传递

讲解触摸事件传递原理的网上有一大把,有从源码角度讲的,有从实际例子角度讲的.我这里呢只是记录下自己的理解,讲的可能没其他大牛透彻,有错误的跪求评论指正. 直接上图,对照图解和文字来分析触摸事件的传递. (1)乱七八糟图解版: (2)看图说话: (2.1)上图并不包含Activity,Activity没有onInterceptTouchEvent方法,默认实现都是直接往下传递. (2.2)讲解3个触摸事件控制方法的含义及其返回值的意义: <1>onInterceptTouchEvent onIn

【转】QT事件传递与事件过滤器

1.事件类型 Qt程序是事件驱动的,程序的每个动作都是由幕后某个事件所触发. Qt事件的类型很多,常见的qt的事件如下:            键盘事件: 按键按下和松开.        鼠标事件: 鼠标移动,鼠标按键的按下和松开.        拖放事件: 用鼠标进行拖放.        滚轮事件: 鼠标滚轮滚动.        绘屏事件: 重绘屏幕的某些部分.        定时事件: 定时器到时.        焦点事件: 键盘焦点移动.        进入和离开事件: 鼠标移入widge

微信小程序 - 事件 | 传递 | 冒泡

事件 常见的事件有: 类型 触发条件 最低版本 touchstart 手指触摸动作开始   touchmove 手指触摸后移动   touchcancel 手指触摸动作被打断,如来电提醒,弹窗   touchend 手指触摸动作结束   tap 手指触摸后马上离开   longpress 手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发 1.5.0 longtap 手指触摸后,超过350ms再离开(推荐使用longpress事件代替)   trans

事件传递之一(基本概念)

Android事件传递机制之一 所谓事件传递是指在Android应用程序开发中,当有多个View叠加在同一个区域内,如果按下View所在的区域,按下的Down.Move,Up事件将如何进行传递的过程. 假设一个ViewGroup里面包含了一个View,当用户按下View时,ViewGroup和View有哪些方法会触发呢. 在了了解这些事件传递之前,我们先来了解一下几个方法的概念: 1. dispatchTouchEvent:此方法只有继承ViewGroup的类才有,是指向childView分发事

iOS响应事件传递, nextResponder研究

这里,我们考虑以下二种情况. 问题1. 如何调用父view的controller里面的方法? 答案如下:[[self superview ].nextResponder  method];[[[self superview ] nextResponder]  method];[self.nextResponder method];上面的都可以,看情况使用,使用的时候最好判断一下. 官方解释UIView implements this method by returning the UIViewC

Android Touch事件传递机制解析

开篇语:最近程序在做一个小效果,要用到touch,结果整得云里面雾里的,干脆就好好把android touch机制好好看了一下,呵呵.. android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法: 1)public boolean dispatchTouchEvent(MotionEvent ev)          这个方法用来分发TouchEvent 2)public boolean onInterceptTouchEvent(MotionEv