ios 事件传递和响应的总结
来源:互联网 发布:端口号和其他软件重复 编辑:程序博客网 时间:2024/05/18 01:45
● 如果某视图的pointInside:withEvent:返回YES,并且它的所有子视图hitTest:withEvent:都返回nil,或者该视图没有子视图,那么该视图的hitTest:withEvent:返回自己self。
● 如果子视图的hitTest:withEvent:返回非空对象,那么当前视图的hitTest:withEvent也返回这个对象,也就是沿原路回退,最终将hit-test view传递给keyWindow进行响应。
● 以下视图的hitTest-withEvent:方法会返回nil,导致自身和其所有子视图不能被hit-testing发现,无法响应触摸事件:
隐藏(hidden=YES)的视图;
禁止用户操作(userInteractionEnabled = NO)的视图;
alpha<0.01的视图;
视图超出父视图的区域;
-- 既然系统通过hitTest:withEvent:做传递链取回hit-test view,那么我们可以在其中一环修改传递回的对象,从而改变正常的事件响应链。
2.触摸事件的传递是从父控件传递到子控件。即树状结构的根节点向叶子节点递归传递。
也就是说,如果父控件不能接收触摸事件那么子控件就不可能接收到触摸事件。
3.事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(子控件到父控件)。
4.对于一个View,hitTest为什么会调用两次?
因为一次是消息传递时,还有一次是响应时。分别是入栈出栈操作,父View先入栈,后出栈。
5.不管视图能不能处理事件,只要点击了视图就会产生事件,关键看该事件是由谁来处理。也就是说,如果视图不能处理事件,点击视图,还是会产生一个触摸事件,只是该事件不会由被点击的视图处理而已。
6. 如果设置父控件的透明度或者hidden,会直接影响到子控件的透明度的hidden,如果父控件的透明度为0或者hidden=YES,那么子控件也是不可见的。同上1.
7.技巧:想让谁成为最合适的view就重写谁自己的父控件的hitTest:withEvent:方法返回指定的子控件(我下面会实现该案例),或者重写自己的hitTest:withEvent:方法return self. 但是,建议在父控件的hitTest:withEvent:中返回子控件作为最合适的view。
8.return nil的含义:
hitTest:withEvent:中return nil的意思是调用当前的hitTest:withEvent:方法的view不是合适的view,子控件也不是合适的view。如果同级的兄弟控件也没有合适的view,那么最合适的view就是父控件。
9.[self.view convertPoint:point fromView:self]
把self.view的坐标系从self转换到自己的坐标系。然后就可以通过手动调用pointInside来判断是否在某个view内。
- ios 事件传递和响应的总结
- iOS事件的传递和响应
- ios事件传递和响应
- iOS事件传递和事件响应链
- iOS中事件的传递和响应者链条
- iOS之事件的传递和响应机制
- iOS之事件的传递和响应机制-原理篇
- iOS-事件的传递与响应
- iOS的事件传递响应链
- iOS 事件的传递与响应
- iOS响应者链,事件的传递
- iOS 响应者链,事件的传递
- iOS 响应者链,事件的传递
- iOS事件传递响应机制
- 事件的传递和响应(响应者链条)
- IOS响应者链,事件传递和阻断
- iOS 事件传递机制和响应者链条
- iOS中的事件传递和响应者链条
- Ubuntu安装Zabbix3.2
- Junior Unity3d Engineer | 初级Unity3d工程师
- Spark
- 【剑指offer】有序二维数组中的查找
- Java jxl导入excel文件,导入的数字、身份证号码、手机号变成了科学计数法,解决方案
- ios 事件传递和响应的总结
- Backend Engineer | 后端工程师
- AndroidStudio中Module Library中使用butterknife踩坑
- 宏变量的打印
- java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(ja
- Data Manager | 游戏版本管理工程师
- 模拟memmove
- letcode153Find Minimum in Rotated Sorted Array
- PostgreSQL