首页 > 代码库 > 0821基础控件-作业(UIView常用属性)
0821基础控件-作业(UIView常用属性)
一、UIView的常用属性1——父子视图属性
1、 superview
获得自己的父控件对象
2、subviews
获得自己的所有子控件对象
注意:
–一个视图最多只能有一个父视图
–一个视图可以有多个子视图
代码段1.1:
// 系统加载完Storyboard之后,会自动执行 - (void)viewDidLoad { [super viewDidLoad]; // 如果这句话没有执行,一定是StoryBoard出了问题 NSLog(@"View Did Load"); // SuperView UIView *superView = self.view.superview; // NSLog可以使用%@ Log所有的“对象”,就是在定义的时候,使用了*这个标记 // ViewController会自动有一个UIView,这个是RootView,根视图没有superview NSLog(@"%@", superView); NSArray *subviews = [self.view subviews]; NSLog(@"子视图数量 %d", [subviews count]); for (UIView *view in self.view.subviews) { NSLog(@"%@", view); } // 看子视图的子视图 UIView *sView = _subView1.superview; NSLog(@"子视图的父视图 %@", sView); NSArray *subViews1 = [_subView1 subviews]; for (UIView *view in subViews1) { NSLog(@"黄色视图的子视图是 %@", view); } }
二、UIView的常用属性2——位置尺寸属性
1、frame
控件所在矩形框的位置和尺寸(以父控件的左上角为坐标原点)
2、bounds
控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x和y永远为0)
3、center
控件中点的位置(以父控件的左上角为坐标原点),通过center属性设置视图位置更加方便
注意
–用frame和center可以修改UIView的位置
–用frame和bounds可以修改UIView的尺寸
–通常:修改自身位置大小时使用frame,而子视图(控件)在设置位置时,会相对父视图的bounds进行设置
代码段2.1:
// 查看边框 - (IBAction)viewViewFrame:(id)sender { // 需要用到一个Fundation的函数,讲一个矩形定义转换成字符串 NSLog(@"frame: %@", NSStringFromCGRect(_subView1.frame)); } // 查看边界 - (IBAction)viewViewBounds:(id)sender { NSLog(@"bounds: %@", NSStringFromCGRect(_subView1.bounds)); } // 查看中心点 - (IBAction)viewViewCenter:(id)sender { NSLog(@"center: %@", NSStringFromCGPoint(_subView1.center)); }
代码段2.2:
#pragma mark - 查看视图属性 - (IBAction)viewProperties:(UIButton *)sender { NSLog(@"%d", sender.tag); switch (sender.tag) { case 0: NSLog(@"frame: %@", NSStringFromCGRect(_subView1.frame)); break; case 1: NSLog(@"bounds: %@", NSStringFromCGRect(_subView1.bounds)); break; case 2: NSLog(@"center: %@", NSStringFromCGPoint(_subView1.center)); break; default: break; } }
注:可以通过Xcode可视化界面或者setTag方法来设置按钮的tag属性;
代码段2.3:
// 旋转视图 - (IBAction)rotationView:(id)sender { // 旋转角度的参数是弧度值,弧度制是一个浮点数,180度的角度对应的弧度值是PI , 90 = PI / 2, 45 = PI / 4 // 使用TransformMakexxx方法是相对视图初始位置的形变 CGAffineTransform transform = CGAffineTransformRotate(_subView1.transform, M_PI_4); [_subView1 setTransform:transform]; } // 缩放视图 - (IBAction)scaleView:(id)sender { // 点一下,放大,tag = 1 // 再点一下,缩小 tag = 0 // sx表示水平方向缩放的比例 // sy表示垂直方向缩放的比例 CGAffineTransform transform; if (_subView1.tag == 0) { transform = CGAffineTransformScale(_subView1.transform, 1.2, 1.5); [_subView1 setTag:1]; } else { // 缩小的时候,需要注意比例的处理 transform = CGAffineTransformScale(_subView1.transform, 1.0 / 1.2, 1.0 / 1.5); [_subView1 setTag:0]; } [_subView1 setTransform:transform]; } // 平移视图 - (IBAction)translationView:(id)sender { CGAffineTransform transform; // 如果tag == 0,向下移动300个点 // 如果tag == 1,回复初始位置 if (_subView1.tag == 0) { transform = CGAffineTransformMakeTranslation(10.0, 300.0); [_subView1 setTag:1]; } else { transform = CGAffineTransformMakeTranslation(0, 0); [_subView1 setTag:0]; } [_subView1 setTransform:transform]; }
代码段2.4:
// 形变操作 - (IBAction)transformAction:(UIButton *)sender { CGAffineTransform transform; // 根据按钮的tag,来决定对子视图做什么形变操作 switch (sender.tag) { case 0: // 旋转 transform = CGAffineTransformRotate(_subView1.transform, M_PI_4); break; case 1: // 缩放 if (_subView1.tag == 0) { transform = CGAffineTransformScale(_subView1.transform, 1.2, 1.5); [_subView1 setTag:1]; } else { // 缩小的时候,需要注意比例的处理 transform = CGAffineTransformScale(_subView1.transform, 1.0 / 1.2, 1.0 / 1.5); [_subView1 setTag:0]; } break; case 2: // 平移 if (_subView1.tag == 0) { transform = CGAffineTransformMakeTranslation(10.0, 300.0); [_subView1 setTag:1]; } else { transform = CGAffineTransformMakeTranslation(0, 0); [_subView1 setTag:0]; } break; default: break; }
三、UIView的常用属性3——标记属性
1、tag整数,控件的ID(标记),父控件可以通过tag来找到或区分子控件,可以通过以下方法设置tag属性:
[self.button setTag:0];
可以再程序代码中动态地更新tag属性值,以达到不同的按钮操作效果。
四、UIView的常用属性4——形变属性
1、transform
控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
注意:
–UIView一次只能应用一个形变属性
–设置transfrom会改变UIView的frame属性,但不会改变bounds属性
–CGAffineTransformMakeScale相对UIView的初始状态进行形变
–CGAffineTransformScale相对UIView的当前状态进行形变
五、UIView封装的简单动画效果
[UIView beginAnimations:nil context:nil]; // 设置动画持续时间 [UIView setAnimationDuration:.3]; // 需要动画的代码段 [UIView commitAnimations];
代码5.1:
// 定义动画效果 // [UIView beginAnimations:nil context:nil]; // // 默认动画时间长度是0.2秒 // [UIView setAnimationDuration:3.0f]; [UIView animateWithDuration:2.0f animations:^{ // 设置子视图的形变属性 [_subView1 setTransform:transform]; } completion:^(BOOL finished) { [UIView animateWithDuration:1.0f animations:^{ // 设置视图背景颜色 [_subView1 setBackgroundColor:[UIColor redColor]]; // 设置视图透明度 [_subView1 setAlpha:0.1f]; }]; NSLog(@"动画完成"); }]; // 提交动画效果 // [UIView commitAnimations]; NSLog(@"动画提交"); }
六、UIView封装了三个块动画方法
1、[UIView animateWithDuration:animations:]
2、[UIView animateWithDuration:animations:completion:]
3、[UIView animateWithDuration: delay: options: animations: completion:]
注意:
对比beginAnimations动画的方式,块动画具有以下几点优势:
1、可以在动画完成时做一些其他的任务
2、可以设置动画延迟及动画效果选项
3、块动画支持嵌套