Swift基础之UIView与UIWindow

作者: 大脸猫121 | 来源:发表于2016-06-14 09:33 被阅读2693次

    swift语言已经出来一段时间了,我自己也整理了一些资料和demo,在这里和大家分享一下。分享的目的呢,就是想和大家一起研究和学习,这是我第一次写哦,肯定会有很多不足之处,希望大家多加指点。o

    一、UIView与UIWindow的关系

    就像大家看见的一样,UIView就是表示屏幕上的一块矩形区域,它在App中占有绝对重要的地位,因为iOS中几乎所有的可视控件都是UIView的子类。
    UIView继承自UIResponder,它是负责显示的画布,如果说把window比作画框的话。我们就是不断地在画框上移除、更换或者叠加画布,或者在画布上叠加其他画布,大小当然由绘画者来决定了。有了画布,我们就可以在上面任意施为了。很多简单的东西我会把库里面的内容贴出来,如果东西太多贴出来就不太好,朋友们自己去库文件里面看吧。这个类在UIView.h里面哦。

    UIView的功能 :

    • 管理矩形区域里的内容
    • 处理矩形区域中的事件
    • 子视图的管理
    • 还能实现动画
      UIView的子类也具有这些功能

    窗口UIWindow是一个视图的子类。

    窗口的主要功能:

    一是提供一个区域来显示视图,二是将事件分发给视图。一个应用通常只有一个窗口,但也不例外。window对象有以下职责:它包含了应用程序的可视化的内容·它为视图和其他应用程序对象在触摸事件中提供了关键性的作用·它与视图控制器一起协作来呈现数据。

    二、UIView的创建和属性

    1.UIView的创建

    定义一个全局的UIView对象

     var myView:UIView?
    

    2.UIView的属性方法

    frame 是CGRect frame的origin是相对于父视图的左上角原点(0,0)的位置,改变视图的frame会改变center
    center 是CGPoint 指的就是整个视图的中心点,改变视图的center也会改变frame
    bounds 是CGRect 是告诉子视图本视图的原点位置(通俗的说就是,子视图的frame的origin与父视图的bounds的origin的差,就是子视图相对于父视图左上角的位置,如果结果为负,则子视图在父视图外)
    通过addSubview:这个方法添加子类,不管谁添加它,只要越晚添加,视图就在越上层

      let view1 = UIView(frame: CGRect(x: 10,y: 50,width: 200,height: 200))
      view1.center = CGPoint(x: 100, y: 100)
    

    一个 UIView 里面可以包含许多的 Subview(其他的 UIView),而这些 Subview 彼此之间是有所谓的阶层关系,这有点类似绘图软体中图层的概念,下面代码演示了几个在管理图层(Subview)上常用的方法。

        //新增和移除SubView
        myView?.removeFromSuperview()
        myView?.addSubview(label)
    
    • 在UIView中将Subview往前或是往后移动一个图层,往前移动会覆盖住较后层的 Subview,而往后移动则会被较上层的Subview所覆盖。

        //将Subview往前移动一个图层(与它的前一个图层对调位置)
        self.view.bringSubviewToFront(myView!)
        //将Subview往后移动一个图层(与它的后一个图层对调位置)
        self.view.sendSubviewToBack(myView!)
      
    • 在UIView中使用索引Index交换两的Subview彼此的图层层级。

      //交换两个图层
      self.view.exchangeSubviewAtIndex(index1, withSubviewAtIndex: index2)
      
    • 使用Subview的变数名称取得它在UIView中的索引值(Index )。
      //获取index
      let index = self.view.subviews.indexOf(subView名称)

    • 替Subview加上NSInteger 的标记(Tag)好让之后它们分辨彼此。
      //加上标记
      myView?.tag = 1
      //通过标记得到view 返回值为UIView
      let otherView = UIView().viewWithTag(1)

    • 取得UIView中所有的Subview,呼叫此方法会传回一个 NSArray,并以由后往前的顺序列出这些 Subview。
      UIView().subviews

    3.UIView中要注意的那些事儿

    在iOS应用上实现UI就需要子类化UIView,也就是要重写UIView的init方法。注意:两种语言有所区别。
    Objective-C只需在UIView子类中重写必要的init方法。要初始化一个UIView框架,就要重写initWithFrame:框架,如下所示:
    @implementation SubUIView
    -(id) initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self != nil) {
    // ...
    }
    return self;
    }
    @end
    然而Swift需要多一些步骤来重写同一个init方法。首先,重写使用CGRect框架作为其参数的init方法。根据UIView文档,用Swift语言构建时,须重写init( coder: ),但我们不需要这种方法,就用如下代码处理。类属性初始化所需的代码可以在init( frame: )中执行。
    class SubUIView: UIView {
    override init(frame: CGRect) {
    super.init(frame: frame)
    // ...
    }
    required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
    }
    }
    当然,UIView的属性和用法还有很多很多,在以后的UI资料中还会多次介绍,希望大家关注哦。

    三、UIWindow的创建和属性

    1.UIWindow的创建

    定义一个全局的UIWindow变量

     var window:UIWindow?
    

    2.UIWindow的属性介绍

    UIWindow() 创建一个UIWindow对象 参数为 这个UIWindow的frame,下面我细说

     self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    

    使被使用对象的主窗口显示到屏幕的最前端,注意:! 的意思是允许window==nil 时候运行,但是window==nil程序运行崩溃 !

     self.window!.makeKeyAndVisible()
    

    设置窗口的背景颜色

    self.window!.backgroundColor = UIColor.redColor();
    

    在这里只是对UIView和UIWindow的简单介绍,主要针对有一定OC基础的小伙伴们,在以后的文章中还会继续介绍,希望大家关注哦。

    相关文章

      网友评论

      • 鬼公子:我OC转swift,刚看完swift语法,现在跟着你的文章写UI,加油,不错,😀
      • 我的梦想之路:严厉的贝儿
        我的梦想之路:@贝尔特伦 给你一个赞
        贝尔特伦:@左耳_糖糖 我严厉,也是为了大家嘛
      • 贝尔特伦:内容不够全面,缺少一些常用属性和方法,还有就是当UIView子类化出来时,如何加载,需要补充下。
        大脸猫121:@贝尔特伦 好的, :grin:

      本文标题:Swift基础之UIView与UIWindow

      本文链接:https://www.haomeiwen.com/subject/pqeydttx.html