iOS基石——UIView

来源:互联网 发布:淘宝cpu散片哪家靠谱 编辑:程序博客网 时间:2024/04/30 04:36

UIView的使用

UIView 原理
1.它是一个iOS开发中非常重要的类。
UILabel,UIButton,UIImageView父类或间接父类都是UIView,换句话说只要是界面上能看到的东西都是UIView

2.坐标系的属性和方法
@property(nonatomic) CGRect frame;
@property(nonatomic) CGRect bounds;
@property(nonatomic) CGPoint center;
@property(nonatomic) CGAffineTransform transform;
//另:frame bounds center三个属性相互关联,改变其中一个,另两个也会改变。

3.属性: 位置和大小, 背景颜色
方法: 显示和隐藏
把所有的控件的共同的属性和行为抽取出来, 形成了UIView视图类。
(1)位置frame
(2)背景颜色backgroundColor
(3)透明度alpha
(4)中心位置center
(5)设置大小bounds
(6)tag标签
(7)是否交互userInteractionEnabled
//是否与用户交互 默认YES
view.userInteractionEnabled = YES;
//UILabel UIImageView 默认交互是NO
//UIButton 默认交互是YES
(8)是否隐藏
//是否隐藏 默认是NO 如果是YES 相当于alpha = 0 隐藏后按钮不能被点击
view.hidden = NO;

4.视图层次感
【注】任何视图,都可以添加到另一个视图上面,但是每个视图只能有一个父视图。也就是说一个子视图被添加到另一个视图上,会从原父视图上脱离。
【注】子视图的坐标是相对于父视图的。以父视图左上角一点为原点。移动父视图,因为子视图的位置是相对的,所以会一起移动。
1.把view放在最上面bringSubviewToFront
2.把view放在最下面sendSubviewToBack
3.获取一个父视图superview(仅有一个)
//superview 拿到某视图的父试图
UIView *superView = redView.superview;
4.获取子视图数组(可以有多个)
//subviews拿到某视图所有的子视图
NSArray *arr = self.view.subviews;
5.销毁一个视图(removeFromSuperview)
6.子视图插入insertSubview
7.交换两个子视图(exchangeSubviewAtIndex)
//父试图可以改变子试图的层级关系
//把子试图放到最前面(上面)
[self.view bringSubviewToFront:redView];

//把子试图放到最后面(下面)[self.view sendSubviewToBack:greenView];//把某个子试图放到另一个子试图的上面[self.view insertSubview:greenView aboveSubview:redView];//把某个子试图放到另一个子试图的下面[self.view insertSubview:greenView belowSubview:redView];//把某个试图放到指定位置上[self.view insertSubview:blueView atIndex:4];//先添加的在最前面  数组元素的顺序是子视图显示的顺序NSLog(@"%@",arr);for (UIView * view in self.view.subviews) {    if ([view isKindOfClass:[UIView class]]) {        NSLog(@"是UIView");    }else if ([view isKindOfClass:[UIButton class]]){        NSLog(@"是按钮");    }}UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 40, 10)];label.text = @"label";//任何视图都可以添加到任何试图上[redView addSubview:label];//把某视图从父视图移除 子试图调用这个方法 父试图不能主动移除子视图[redView removeFromSuperview];//如果这个试图移除了 它的子试图会一起移除

5.UIView动画
/————–非Block动画制作——————–/
/*
//UIView动画,由类方法驱动
//从这里开始是动画的结果
[UIView beginAnimations:nil context:nil];
//设置延迟时间
[UIView setAnimationDelay:15];
//设置代理
[UIView setAnimationDelegate:self];
//设置代理回调的方法
[UIView setAnimationDidStopSelector:@selector(completed)];
//动画结束后,self要调用completed

//设置动画执行时间[UIView setAnimationDuration:5];//动画可以修改任何UIView子类的坐标,大小,形变,色彩和透明度view.frame = self.window.bounds;view.backgroundColor = [UIColor greenColor];[UIView commitAnimations];//完成动画结果的设置,开始执行动画

*/

/*-------------Block版本的动画效果------------------*/void (^animations)(void) = ^(void){    view.frame = self.window.bounds;    view.backgroundColor = [UIColor blueColor];};void (^completion)(BOOL) = ^(BOOL finished){    NSLog(@"动画结束!");};[UIView animateWithDuration:5 delay:15 options: UIViewAnimationOptionLayoutSubviews animations:animations completion:completion];

6.停靠模式
【注】停靠模式,是控制父视图改变大小时,子视图的变化方式。
【注】停靠模式并非服务于视图缩放,使用transform属性scale视图,根本是等比缩放。停靠模式是服务于父视图边界修改后,子视图的布局。
//自动改变子试图的大小 默认是NO 设置成YES子试图会跟着父试图改变大小
view.autoresizesSubviews = YES;

//子试图的停靠模式subView.autoresizingMask = UIViewAutoresizingFlexibleHeight |UIViewAutoresizingFlexibleWidth;// ‘|’ 位运算符//    UIViewAutoresizingNone                 = 0,//    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,//  右边界和父视图的距离不变 左边界自由//    UIViewAutoresizingFlexibleWidth        = 1 << 1,//  自由的宽度//    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,//  左边界和父视图的距离不变 右边界自由//    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,//  下边界和父视图的距离不变 上边界自由//    UIViewAutoresizingFlexibleHeight       = 1 << 4,//  自由的高度//    UIViewAutoresizingFlexibleBottomMargin = 1 << 5//  上边界和父视图的距离不变 下边界自由