一、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、块动画支持嵌套