iOS判断UIView是否显示在屏幕上
来源:互联网 发布:win7网络组件修复工具 编辑:程序博客网 时间:2024/05/30 05:25
头文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@interface
UIView (UIScreenDisplaying)
// 判断View是否显示在屏幕上
- (BOOL)isDisplayedInScreen;
@end
实现文件
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*****************************************************
* MIT Licence
*
* Author: __承_影__
*
* Date: 2015.2.10
*
****************************************************/
@implementation
UIView (UIScreenDisplaying)
// 判断View是否显示在屏幕上
- (BOOL)isDisplayedInScreen
{
if
(self == nil) {
return
FALSE;
}
CGRect screenRect = [UIScreen mainScreen].bounds;
// 转换view对应window的Rect
CGRect rect = [self convertRect:self.frame fromView:nil];
if
(CGRectIsEmpty(rect) || CGRectIsNull(rect)) {
return
FALSE;
}
// 若view 隐藏
if
(self.hidden) {
return
FALSE;
}
// 若没有superview
if
(self.superview == nil) {
return
FALSE;
}
// 若size为CGrectZero
if
(CGSizeEqualToSize(rect.size, CGSizeZero)) {
return
FALSE;
}
// 获取 该view与window 交叉的 Rect
CGRect intersectionRect = CGRectIntersection(rect, screenRect);
if
(CGRectIsEmpty(intersectionRect) || CGRectIsNull(intersectionRect)) {
return
FALSE;
}
return
TRUE;
}
测试用例:
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
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(
0
,
0
,
40
,
40
)];
// 无父视图
BOOL b1 = [v isDisplayedInScreen];
NSLog(@
"b1: %d"
, b1);
//
[self.view addSubview:v];
BOOL b2 = [v isDisplayedInScreen];
NSLog(@
"b2: %d"
, b2);
v.frame = CGRectZero;
BOOL b3 = [v isDisplayedInScreen];
NSLog(@
"b3: %d"
, b3);
CGRect screenRect = [UIScreen mainScreen].bounds;
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
v.frame = CGRectMake(-screenWidth, -screenHeight, screenWidth, screenHeight);
BOOL b4 = [v isDisplayedInScreen];
NSLog(@
"b4: %d"
, b4);
0 0
- iOS判断UIView是否显示在屏幕上
- iOS判断UIView是否显示在屏幕上
- iOS : 判断两个控件是否重合.(可用于判断某一个控件是否显示在window上)
- 判断View是否显示在界面上
- 判断view 是否显示在scrollview 上
- iOS判断当前控制器是否在显示
- JS判断div是否在屏幕显示范围内,是否滚出屏幕显示范围
- 判断控件是否在屏幕的显示范围内
- iOS 判断屏幕是否锁屏
- 如何判断ios设备是否是高清屏幕
- iOS 判断屏幕是否锁屏
- 在任意UIView上显示Badge
- 在任意UIView上显示Badge
- UIMenuController 在UIView 上的 显示
- 在屏幕上显示时间
- UIView 判断是否visible
- 判断一个div是否在屏幕外
- 判断元素是否在屏幕中
- Word Break
- http协议
- 有章法的学习c++(4)基本内置类型(一)
- 下拉菜单的实现(二)
- ie不支持CSS3的border样式
- iOS判断UIView是否显示在屏幕上
- UVA1386-Cellular Automaton(循环矩阵)
- 第二周项目一 输出hello world
- Vuejs——(10)组件——父子组件通信
- EF最基本的增删改查
- ffmpeg源码分析--1总
- Hibernate多条件模糊分页查询
- JS中的==和===
- 对单链表的结构体定义与声明