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基础的小伙伴们,在以后的文章中还会继续介绍,希望大家关注哦。
网友评论