zoukankan      html  css  js  c++  java
  • iOS之美: UIView 与 UIWindow之间的关系

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

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

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

    iOS之美: UIView 与 UIWindow之间的关系 - 悠悠电台 - 悠悠电台——移动流媒体收音机

    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 

  • 相关阅读:
    leetcode 第 44 场双周赛 1 1734. 解码异或后的排列 C
    leetcode 第 44 场双周赛 1 1732. 找到最高海拔 C
    2014浙江省赛 ZOJ
    2018沈阳区域赛现场赛 Gym
    山东省ACM多校联盟省赛个人训练第六场 poj 3335 D Rotating Scoreboard
    Minieye杯第十五届华中科技大学程序设计邀请赛现场同步赛 I Matrix Again
    计算机爱好者协会技术贴markdown第四期
    计算机爱好者协会技术贴markdown第三期
    摇骰子
    PAT 1003 dijkstra
  • 原文地址:https://www.cnblogs.com/wangpei/p/3538684.html
Copyright © 2011-2022 走看看