zoukankan      html  css  js  c++  java
  • UIView /  UIView的布局

    • //! 一个视图可以有n个子视图,但是一个视图只能有一个父视图
    • struct CGRect {
        CGPoint origin;
        CGSize size;
      };
    CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
    {
      CGRect rect;
      rect.origin.x = x; rect.origin.y = y;
      rect.size.width = width; rect.size.height = height;
      return rect;
    }
    • struct CGPoint {
        CGFloat x;
        CGFloat y;
      };
    • struct CGSize {
        CGFloat width;
        CGFloat height;
      };
     
    • /*
           快速创建结构体变量的方法
           CGRect (位置 大小) ---- CGRectMake();
           CGPoint(x, y) ---- CGPointMake();
           CGSize(w, h) ---- CGSizeMake();
           */
     
     
    • // 获取父视图
        UIView *bView = [[UIView alloc] initWithFrame:CGRectMake(110, 234, 100 , 100)];
        bView.backgroundColor = [UIColor greenColor];
        [self.window addSubview:bView];
        [bView release];
        // superview的返回值是UIView类型的,而此时bView父视图是UIWindows *类型的,所以要强制转换
        UIWindow *findWindow = (UIWindow *)bView.superview;
        // 通过superView得到的视图操作bView的父视图
        findWindow.backgroundColor = [UIColor whiteColor];
     
    • // 获取self.window上的所有子视图, 父视图得到子视图的数组元素的顺序和子视图添加的顺序一致 (返回值是一个数组)
          NSArray *subArray = self.window.subviews;
          NSLog(@"%@", subArray);
         
          // 通过得到的管理子视图的数组可以操作视图上的子视图
          UIView *aView = self.window.subviews[1];
          aView.backgroundColor = [UIColor purpleColor];
          aView.alpha = 0.3;
     
    • // 练习3:获取view2的方式 方式不限
          // 1 通过子视图数组
          UIView *findView = self.window.subviews[2];
          NSLog(@"%@", findView);
          // 2 通过设置tag值
          UIView *tagView2 = [self.window viewWithTag:300];
          NSLog(@"%@", tagView2);
          // 3 通过另一个子视图间接得到目标子视图
          UIView *findView2 = [view1.superview viewWithTag:300];
          NSLog(@"%@", findView2);
     
    /**
         UIView的常见属性:
         1.backgroundColor :视图的背景颜色 颜色通过UIColor类来赋值,默认背景颜色是透明的
        
         2.hidden :显隐性 ,控制视图是显示还是隐藏,BOOL类型,默认是NO不隐藏;
        
         3.alpha :透明度 ,透明度的范围是0.0到1.0之间,默认值是1.0(完全不透明);
        
         4.superView :父视图, 获取当前视图的父视图,一个视图只能有一个父视图
        
         5.subView :子视图, 获取一个视图上所有的子视图,一个视图可以有多个子视图
        
         6.tag :标记 , 设定tag值时一定要设置100以上的数字,作为视图的唯一标示 [ VIP ]
        
         */
     
     

    //! UIView的重量级属性: frame bounds center
        // frame :包含(origin值,指的是视图左上角点的坐标; size指的是视图的大小),主要用来控制一个视图在它父视图上的位置和大小,其中位置是相对于父视图原点在x轴和y轴的距离
        // center:中心点,指的就是视图中心位置的坐标,也是相对于父视图的原点位置
        // center.x = frame.origin.x + frame.size.wideth / 2
        // center.y = frame.origin.y + frame.size.height / 2
    // frame 和 center 的关系 :共同点都是相对于父视图原点,center变化,frame也变化;frame变化,center也变化.
     

    1
    [view1 setBounds:CGRectMake(-30, -30,200,200)];
     
    setBounds的作用是:强制将自己(view1)坐标系的左上角点,改为(-30,-30)。那么view1的原点,自然就向在右下方偏移(30,30)。
    // bounds 是一个视图的边界, CGRect(origin, size),这个origin这个点永远都是自身视图左上角的点,origin点的位置代表距离自身视图坐标原点的位置,一个视图创建后bounds的origin和自身坐标系的原点是重合的,bounds的size和frame的size是一样的; 修改bounds的origin的时候,frame不会变化,center也不会变化
    #pragma mark - 修改一个视图的bounds;
        // 修改bounds,影响自身坐标系的原点 (bounds的起始位置在视图的左上角) //修改bounds影响子视图在父视图上的位置
       
        CGRect bounds = redView.bounds;
        NSLog(@"%@", NSStringFromCGRect(bounds));
        bounds.origin.x = 50;
        bounds.origin.y = 50;
        redView.bounds = bounds;
    // 强制将自己(redView)坐标系的左上角点,改为(50, 50)。那么view1的原点,自然就向在左上方偏移(50,50)。然后子视图根据新的原点,位置发生变化
     

    /*
         1.最后添加的视图肯定在所有视图的最前面
         2.子视图永远在父视图的前面
         3.子视图的添加是有先后顺序的
         4.父视图是通过一个数组管理自身视图上的所有子视图,可以通过下标操作子视图
         5.如果想要调整父视图上子视图的层级关系,需要通过父视图来调整
         6.如果想从父视图上移除,使用子视图调用方法
         */
     // insertSubview:A aboveSubview:B 把A视图插入B视图上面
        [self.window insertSubview:greenView aboveSubview:blueView];
        // insertSubview:A atIndex:index 将视图A插入到指定位置index
        [self.window insertSubview:redView atIndex:2];
        // insertSubview:A belowSubview:B
        [self.window insertSubview:redView belowSubview:blueView];
       
       
        // 调整视图层次关系的其他方法
       
        // 父视图 bringSubviewToFront:B 将视图B调整到所有子视图的最前面
        //[self.window bringSubviewToFront:redView];
        // sendSubviewToBack:B 将视图B调整到所有子视图的最后面
        //[self.window sendSubviewToBack:redView];
        // 根据给定的下标交换两个子视图在父视图上的位置
        //[self.window exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; // 一个视图只能有一个父视图
       
        // 从父视图上移除子视图,子视图自己走
        [blueView removeFromSuperview];
       
        // 定时器
        // 1:设置定时器隔多长时间触发一次
        // 2:指定由谁来完成定时器方法的操作 self:当前类创建的对象
        // 3.选择执行的方法
        // 4:用户信息
        // 5:是否需要重复执行定时器操作
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(sayHello) userInfo:nil repeats:YES];
  • 相关阅读:
    jsp输出当前时间
    java连接操作Oracle
    Oracle 内置函数
    伪表和伪列
    关于listview视图的 作业
    5月21日 课堂总结
    网格布局作业
    网格布局视图整理
    5月19日课堂总结
    拷贝程序
  • 原文地址:https://www.cnblogs.com/yunji5566/p/5022432.html
Copyright © 2011-2022 走看看