iOS UI学习笔记(二)View的frame和bounds,center
来源:互联网 发布:淘宝店买卖流程及费用 编辑:程序博客网 时间:2024/05/23 21:23
接着昨天的学习,首先来研究一下UIView类的frame属性和bounds属性的区别。
frame是以父视图为参考系,bounds则是以自身为参考系。
下面是直观的实验代码,用来区分frame和bounds的区别:
<span style="font-size:14px;">AppDelegate.m</span>
<span style="font-size:14px;">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; //创建一个窗口,背景设置为红色 UIView *myView1 = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 100, 100)]; [myView1 setBackgroundColor:[UIColor redColor]]; [self.window addSubview:myView1]; //创建另一个窗口,背景设置为蓝色 UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 80, 80)]; [myView setBackgroundColor:[UIColor yellowColor]]; [myView1 addSubview:myView]; //得到myViwe的frame并转换为字符串类型 NSString *frame = NSStringFromCGRect(myView1.frame); NSString *bounds = NSStringFromCGRect(myView1.bounds); NSLog(@"frame = %@",frame); NSLog(@"boounds = %@",bounds); //改变一下bounds的值 [myView1 setBounds:CGRectMake(10, 10, 100, 100)]; return YES;}</span>
运行可查看视图的frame和bounds的值,结果就不上图了,可以自己运行试一试,在这里注意,新建的工程和上一节不一样的是,我们导入了一个空模板。
在设置bounds与frame时,其origina值可以为负数。但注意设置为负数时,其位置的换算。
当bounds的值改变之后,会影响到其子视图在其上的位置显示。
//查看一下屏幕的bounds NSString *screenBounds = NSStringFromCGRect([UIScreen mainScreen].bounds); NSLog(@"bounds = %@",screenBounds);
可以获得屏幕的bounds值。
//视图中心点,参照系为父视图 NSString *centerMyView = NSStringFromCGPoint(myView1.center); NSLog(@"center----%@",centerMyView); [myView1 setCenter:CGPointMake([self.window frame].size.width/2, [self.window frame].size.height/2)];
查看一下第一个视图的中心点,并修改其值,可以发现,红色的视图移动到屏幕中间了,也就是说,修改其center属性之后,其frame属性的orgina属性也跟着发生改变。
[UIScreen mainScreen].bounds注意得到屏幕的宽高的方法,最好用上面的得到,在视图特别多的情况下比较稳妥。
[myView1 setCenter:[self.window center]];也可以用这种方法使两个视图重合并中心点一致。
注意点语法的使用,oc中的点语法与C语言体系下的点语法必须区分开,否则连点容易出错。
在bounds中修改size,frame的size也会改变。
一些常见的属性:
//设置当前视图的透明度,范围值为0-1 myView1.alpha = 0.5;
//将当前视图隐藏 myView1.hidden = YES;
//获取父视图 [myView1 superview];
在这里注意,如果没有父视图,或者在执行添加父视图的时候,获取的值为null;
//获取所有的子视图 NSArray *array = myView1.subviews;
//通过RGB值获得一个颜色对象(随机) UIColor *myColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];注意三原色所需的值在0~1之间,但三原色的范围在0~255之间。
宏定义的规则,要注意其运算优先级,在后续的编程中,会大量使用到。
#define MYMAX(A,B) ((A)>(B)?(A):(B))//注意宏定义的使用规则
<p class="p1"><span class="s1">#define RGBA(r,g,b,a) [UIColor colorWithRed:(r)/</span><span class="s2">255.0</span><span class="s1"> green:(g)/</span><span class="s2">255.0</span><span class="s1"> blue:(b)/</span><span class="s2">255.0</span><span class="s1"> alpha:(a)]</span></p>//宏定义颜色建议多使用,熟悉宏定义。
创建一个具有层次感的视图
//创建一个窗口,背景设置为红色 UIView *myView1 = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 200, 100)]; [myView1 setBackgroundColor:[UIColor redColor]]; NSLog(@"-----%@",myView1.superview); [self.window addSubview:myView1]; for (int i = 0; i < 5; i++) { UIView *myViewTem = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100-i*10, 100-i*10)]; myViewTem.center = myView1.center; [myViewTem setBackgroundColor:[UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1]]; [self.window addSubview:myViewTem]; }运行效果:
在上面的代码中,有个疑问,就是如果要管理生成的视图,怎么去找到它?
那么,为了方便找到,我们可以在视图初始化之后,给他加标记。
这样在for循环的外面,就可以通过tag值得到对应的视图。
//每一个视图都可以加标记,让我们可以找到该视图,由于如果不设置标记,系统会默认给一个标记,所以我们人为赋值时,为了避免和系统标记值冲突,一般1000起步 myViewTem.tag = 1000+i;
//通过tag得到并移动视图 UIView *view=[self.window viewWithTag:1004]; [self.window sendSubviewToBack:view];
移动后的效果:
0 0
- iOS UI学习笔记(二)View的frame和bounds,center
- IOS View中的frame,bounds和center
- iOS开发总结之 view的frame、center和和view的bounds之间的区别
- IOS学习之iOS开发UI基础—手写控件,frame,center和bounds属性
- iOS之 view视图的创建和它的Frame、bounds、center属性
- ios学习笔记之十--center和bounds的使用
- iOS View frame和bounds的区别
- iOS之详解UIView的frame、bounds和center属性
- iOS 中 frame、center 和bounds 的深入了解
- iOS学习(frame、bounds、center:)以及UIView的旋转,平移和缩放
- frame.bounds和center
- frame、bounds和center
- frame,bounds和center
- frame.center和bounds
- 文顶顶 iOS开发UI篇—手写控件,frame,center和bounds属性 iOS开发UI基础—手写控件,frame,center和bounds属性
- frame、bounds和center的使用场景
- Frame,Bounds和Center的区别,联系
- IOS--UI--LessonView Plus(Frame CGRect center Bounds )
- Failed to instantiate the default view controller for UIMainStoryboardFile
- 冒泡排序算法
- 开放封闭原则和接口隔离原则
- 日经春秋 20160105
- css 基本结构
- iOS UI学习笔记(二)View的frame和bounds,center
- include 包含
- OSG+VS2010+Win7环境搭建
- 151220DuoTaiDemo多态详解1
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Linux Shell下获取当前脚本的绝对路径
- Bootstrap的表单控件
- Android WITH_DEXPREOPT与PRODUCT_BOOT_JARS & PRODUCT_SYSTEM_SERVER_JARS
- gcc安装步骤