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];
  • 相关阅读:
    LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
    LeetCode 216. 组合总和 III(Combination Sum III)
    LeetCode 179. 最大数(Largest Number)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)
    指针变量、普通变量、内存和地址的全面对比
    MiZ702学习笔记8——让MiZ702变身PC的方法
    你可能不知道的,定义,声明,初始化
    原创zynq文章整理(MiZ702教程+例程)
  • 原文地址:https://www.cnblogs.com/yunji5566/p/5022432.html
Copyright © 2011-2022 走看看