转自:http://leopard168.blog.163.com/blog/static/168471844201381584533466/

面对iOS初学者,总会被问到一些不常被关注的问题,比如: UIView 与 UIWindow是什么关系? 谁继承的谁?  从字面意思来看,貌似UIWindow 是UIView 的父类, 按说,应该是先有窗口,再有视图?  果真如此么?

事实上, UIView 继承于 UIWindow, 由Apple的官方文档为证。 如下图。

UIWindow继承自UIView,关于这一点可能有点逻辑障碍,画框怎么继承自画布呢?视图怎么继承于窗口呢? 虽说UIWindow 继承于UiView, 但这个 UIWindow 也是一个重中之重的View。 这里,打个比方: UIWindow 虽说也是个View,但它是一个首席View。

看一下App的初始化过程吧:

在application didFinishLauchingWithOptions里面, 有下面一段code。

self.window =[[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
self.window.backgroundColor =[UIColor grayColor];       //给window设置一个背景色  
[self.window makeKeyAndVisible];     //让window显示出来

首先创建一个Window, 之后才在 Window 之上叠加多个View. 
UIView的使用方法 
一个 UIView 里面可以包含许多的 Subview(其他的 UIView),而这些 Subview 彼此之间是有层级关系的。这有点像PS(photoshop)中的图层的概念。下面的代码,演示了View 管理常用的方法:

1.首先是大家最常使用的新增和移除Subview。

[Subview removeFromSuperview];     //将Subview从当前的UIView中移除 
[UIView addSubview:Subview];     //替UIView增加一个Subview

2.在UIView中将Subview往前或是往后移动一个图层,往前移动会覆盖住较后层的Subview,而往后移动则会被较上层的Subview所覆盖。

[UIView bringSubviewToFront:Subview];       //将Subview往前移动一个图层(与它的前一个图层对调位置)//将Subview往前移动一个图层(与它的前一个图层对调位置)
[UIView sendSubviewToBack:Subview];      //将Subview往后移动一个图层(与它的后一个图层对调位置)

3.在UIView中使用索引Index交换两个Subview彼此的图层层级。
[UIView exchangeSubviewAtIndex:indexA withSubviewAtIndex:indexB];    //交换两个图层

4.使用Subview的变数名称取得它在UIView中的索引值(Index )。

NSInteger index =[[UIView subviews] indexOfObject:Subview名称];       //取得Index

5.为Subview加上NSInteger标记(Tag),以便后续区分不同的View。
[Subview setTag:NSInteger];       //加上标记
[UIView viewWithTag:NSInteger];  //通过标记得到view 返回值为UIView
 
6.最后是取得UIView中所有的Subview,调用此方法会传回一个NSArray,并按照从后往前的顺序列出这些Subview,以下代码列出Root中所有Subview。

[UIView subviews];        //取的UIView下的所有Subview

iOS之美: UIView 与 UIWindow之间的关系的更多相关文章

  1. iOS--UIView和UIWindow用法

    基础 UI(user interface)是用户界面:iOS的应用是由各种各样的UI控件组成 UIWindow就是一个窗口,学的第一个基础类,就是一个容器,可以在容器上放不同的内容,每个app都需要借 ...

  2. iOS 深入理解UINavigationController 和 UIViewController 之间的关系

    创建三个类 BasicViewController : UIViewController SecondViewController : UIViewController ThirdViewContro ...

  3. iOS开发——UI篇OC篇&UIView/UIWindow/UIScreen/CALayer

    UIView/UIWindow/UIScreen/CALayer 1.UIScreen可以获取设备屏幕的大小. 1 2 3 4 5 6 7 // 整个屏幕的大小 {{0, 0}, {320, 480} ...

  4. iOS开发中视图控制器ViewControllers之间的数据传递

    iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storybo ...

  5. UIWindow,UINavigationController与UIViewController之间的关系

    UIWindow,UINavigationController与UIViewController之间的关系 虽然每次你都用UINavigationController与UIWindow,但你不一定知道 ...

  6. iOS 之美:iOS Delegate 使用五步曲

    在iOS 开发中, 搞清楚Delegate 是需要花些时间的. Delegate 本来是软件架构设计的一种理念.对于像手机这样一个有限的设备,我们需要充分考虑到:内存要尽量省着用: 视图之间的关系要清 ...

  7. 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系

    (1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...

  8. 在iOS中获取UIView的所有层级结构 相关

    在iOS中获取UIView的所有层级结构 应用场景 在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便 ...

  9. UIView的alpha、hidden和opaque属性之间的关系和区别[转]

    UIView的alpha.hidden和opaque属性之间的关系和区别 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/ ...

随机推荐

  1. Facebook产品的开发流程

    [编者注]王淮是Facebook第二位中国籍工程师,也是第一位中国籍研发经理,他一手开创了Facebook的支付安全和客服工具领域.2011年他离开Facebook,回国成为天使投资人,希望用自己在F ...

  2. 1503162139-ny-分数拆分

    分数拆分 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描写叙述 如今输入一个正整数k,找到全部的正整数x>=y,使得1/k=1/x+1/y. 输入 第一行输入一个整数 ...

  3. getmask

    #include "stdio.h" #include "stdlib.h" #include "string.h" #include &q ...

  4. Fisheye projections from spherical maps [转]

    Fisheye projections from spherical maps Written by Paul Bourke May 2003, software updated January 20 ...

  5. MFC中显示图像的放大、缩小、移动功能

    StretchBlt函数直接对图片进行放大,缩小,显示位置变换. 这个函数有两种形态一种全局函数是这样的:  BOOL StretchBlt(HDC hdcDest, int nXOriginDest ...

  6. git 使用详解-- tag打标签

    Git 的标签管理.跟大多数的 VCS 工具一样,git 也有在历史状态的关键点“贴标签”的功能,一般人们用这个功能来标记发布点(例如’v1.0′). 列出git中现有标签 要想列出git中现有的所有 ...

  7. 突破自我的Docker1.12

    如今,Docker 和容器将要改变世界,早已不是什么秘密了.对于一些深度用户,这种改变已经发生了.不过你造吗?和很多其他改变世界的事物一样,这些事物在彻底改变世界之前总是缺少点什么.但现在什么都不缺了 ...

  8. 如何使用Linux匿名上网-四大法宝

    信息时代给我们的生活带来极大便利和好处的同时也带来了很大的风险.一方面,人们只要点击几下按钮,就能基本上访问已知存在的全部信息和知识;另一方面,要是这种权力落到个别不法分子手里,就会引起重大破坏和灾难 ...

  9. 文件同步程序,Python和C写的DLL

    #coding:utf-8 from ctypes import * from FileCopy import * def GetFilePathList(FilePath): dll = CDLL( ...

  10. 静态库与动态库的制作以及程序的动态函数库解析ldd;ldconfig与/etc/ld.so.conf

    静态库的制作步骤: (1)gcc -c mylib.c -o mylib.o (2)ar rc libmylib.a mylib.o 动态库的制作步骤: gcc -shared mylib.c -o ...