iOS基石——UIView

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
//  上边界和父视图的距离不变 下边界自由
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值