【转载】关于两个视图之间的关系判断

转载: http://blog.wgq.name/2016/07/19/%E5%85%B3%E4%BA%8E%E4%B8%A4%E4%B8%AA%E8%A7%86%E5%9B%BE%E4%B9%8B%E9%97%B4%E7%9A%84%E5%85%B3%E7%B3%BB%E5%88%A4%E6%96%AD/

 

位置关系判断

苹果提供了一些基本的关于两个矩形区域相互位置关系的判断方法,还有一些关于点CGPoint和CGRect之间的关系,点的判断比较容易,这里主要备注一下矩形之间各种情况的判断,主要的相关函数有3个

相关函数:

  • CGRectContainsRect:判断区域1是否包含区域2
  • CGRectIntersectsRect:判断区域1和区域2是否相交
  • CGRectIntersection:获取两个区域相交部份的区域

通过以下图片及各个函数的返会值,就能很直观的看出各个函数的用法

情形1


pupleView frame (100, 100, 100, 50)
orangeView frame (100, 160, 100, 50)
CGRectContainsPoint NO
CGRectIntersectsRect NO
CGRectIntersection (inf, inf, 0, 0)

情形2


pupleView frame (100, 100, 100, 50)
orangeView frame (105, 105, 90, 40)
CGRectContainsPoint YES
CGRectIntersectsRect YES
CGRectIntersection (105, 105, 90, 40)

情形3


pupleView frame (100, 100, 100, 50)
orangeView frame (100, 100, 100, 50)
CGRectContainsPoint YES
CGRectIntersectsRect YES
CGRectIntersection (100, 100, 100, 50)

情形4


pupleView frame (100, 100, 100, 50)
orangeView frame (105, 105, 100, 50)
CGRectContainsPoint NO
CGRectIntersectsRect YES
CGRectIntersection (105, 105, 95, 45)

从属关系判断

主要的函数是

  • isDescendantOfView 是否隶属于

注意不要弄混了,函数返会的是调用的view是否隶属于参数subview(就是说subview是不是通过addsbuview方法添加到view上的),而不是包含,
有两个比较特殊情况要注意:

  • 如果v添加了v1,v1添加了v2,那么v2也是隶属于v的
  • 视图是隶属他本身的

示例:

1
2
3
4
5
6
7
8
self.v1=[[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];
self.v1.backgroundColor=[UIColor cyanColor];
UITapGestureRecognizer *tap1=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapV1:)];
[self.v1 addGestureRecognizer:tap1];
[self.view addSubview:self.v1];
self.v2=[[UIView alloc] initWithFrame:CGRectMake(105, 105, 90, 40)];
[self.v1 addSubview:self.v2];

上面代码中self.vew以及v1,v2之间的隶属关系如下
v1 isDescendantOfView self.view YES
v2 isDescendantOfView v1 YES
v2 isDescendantOfView self.view YES
self.view isDescendantOfView v1 NO
v1 isDescendantOfView self.v1 YES
v1 isDescendantOfView v2 NO

posted on   土匪7  阅读(1611)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示