• //! 一个视图可以有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];

UIView /  UIView的布局的更多相关文章

  1. 100% opacity UILabel over a 50% opacity background (UIView?) UIView是百分之50透明而上面的UILable是100%不透明

    So right now I have a UIView with a UILabel in it. I want the background to have an opacity < 1.0 ...

  2. iOS - UIView

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIView : UIResponder <NSCoding, UIAppearance, UIAppeara ...

  3. UIWindow与UIView

    UIView与UIWindow * 一般应用程序只有一个UIWindow对象.所有的控件都是在UIWindow上展现的.每个UIView对象都有一个window属性,表示当前view显示在哪个窗体上. ...

  4. UIView上的控件使用push方法跳转

    有时候在项目中,为了保持前后页面的推进方式跳转方式一致,会在通过UIview上的控件跳到另一个Controller上,所以,这时候就需要用到这种方式了,当然,present方法可以实现跳转但是样式可能 ...

  5. IOS UIView 04- 自定义控件

    注:本人是翻译过来,并且加上本人的一点见解. 前言 本文将讨论一些自定义视图.控件的诀窍和技巧.我们先概述一下 UIKit 向我们提供的控件,并介绍一些渲染技巧.随后我们会深入到视图和其所有者之间的通 ...

  6. iOS-xib(使用XIB自定义一个UIView )

    1.新建一个xib视图

  7. iOS UIView 基本属性用法

    .创建UIView UIView * redView = [[UIView alloc] initWithFrame:CGRectMake(, , , )]; UIView * blueView = ...

  8. 加深理解UIView,UIResponder,UIController

    转载出处:http://www.th7.cn/Program/IOS/201503/406514.shtml 原文地址==>自定义控件:http://objccn.io/issue-3-4/ 读 ...

  9. ##DAY1 UI、frame、center、bounds、UIVIew

    ##DAY1 UI.frame.center.bounds.UIVIew #pragma mark ———————UI——————————— UI的本意是用户界面,是英文User和 Interface ...

随机推荐

  1. HTML5画布(图像)

    案例1: <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8& ...

  2. 使用PHP解压文件Unzip

    这是一个非常方便的PHP函数从.zip文件解压缩文件.它有两个参数:第一个是压缩文件的路径和第二 function unzip_file($file, $destination) { // creat ...

  3. 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行。

    近来遇到一个IIS服务启动问题,重启服务器PC后,网站启动的时候,提示“ 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行”. 解决方法: 点击"开始" ...

  4. iOS学习之下拉刷新

    今天我们来给昨天的Demo加上下拉刷新和上拉加载更多的功能. 1.下拉刷新. 在viewDidLoad中调用方法addRefreshControl,下拉时可以出现风火轮加载更多的效果. - (void ...

  5. UCOS 信号量

    uCOS-II信号量OSSemCreate(0)和OSSemCreate(1)详解 (2014-04-22 18:04:18) 转载▼ 标签: it 分类: 操作系统 在ucos-II中,为了实现任务 ...

  6. commons-logging log4j的联系区别

    1.Apache通用日志接口(commons-logging.jar)介绍 Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logger, ...

  7. 2016ICPC China-finals 题解

    A:ans=n/3,因为8=1(mod7) B: C: D:二分+贪心,二分答案,即个数,check(mid)时贪心看能不能放成mid个; E:贪心,列出不等关系,然后写个高精度分数类; F:二分+h ...

  8. IOS中获取各种文件的目录路径的方法-备

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...

  9. C51 Keil 优化

    对程序进行优化,通常是指优化程序代码或程序执行速度.优化代码和优化速度实际上是一个予盾的统一,一般是优化了代码的尺寸,就会带来执行时间的增加,如果优化了程序的执行速度,通常会带来代码增加的副作用,很难 ...

  10. BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)

    BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49   <财经>杂志    我有话说(18人参与) 收藏本文        BAT大举投资线下公司,看似咄咄逼人 ...