目录
1 UIView
CocoaTouch框架中视图的根类是UIView,类似于Android中的View,学习IOS的基础,首先要熟悉UIView的使用,因为一切和用户交互的行为都是建立在视图的基础上的,用户可见和用户行为都需要和这些控件进行交互。UIView的继承结构图如下1.1
1.1 UIView继承结构图
1.2 视图的分类
视图分为以下几类
1.2.1 控件
该类视图继承至UIControl,能够响应用户的高级事件,UIButton、UIDatePicker、UISwitch等。
1.2.2 窗口
窗口就是UIWindow对象,一个IOS应用只有一个UIWindow对象,它是所有子视图的根容器,类似于Android中的Window
1.2.3 容器视图
容器视图包括UIToolbar、UIScrollView和其的子类,当显示的内容超出屏幕的时候会出现水平或者垂直方向上的滚动条。
1.2.4 显示视图
显示视图用于显示文字、图片等信息,包括UIImageView、UILable、UIProgressView、UIActivityIndicatorView。
1.2.5 文本和web视图
UITextView、UIWebView,UITextView同时也是容器视图,UIWebView用来家在显示HTML,他们都可以用来显示多行文本。
1.2.6 导航视图
为用户提供屏幕间跳转的导航视图,有UITabBar、UINavigationBar。
1.2.7 警告框和操作表
用以和用户交互,以此来提供反馈,如通过动画的形式弹出来一个警告框的视图,操作表是提供给用户进行选择的可操作视图,
在进行UIView 的学习之前首先要熟悉xcode的使用,以及怎么通过xcode创建一个空白的工程,网络上有很多教程。
1.3 应用界面的层次结构
一般情况一个IOS的应用只会包含一个UIWindow,同时它包含了一个RootView图UIView,根视图RootView一般也只有一个,同UIWindow是配套的。
应用界面的视图层级结构类似于一棵树,Window是树根,RootView是树干,其他的视图对象就是枝叶,如下图
2 界面构建
界面的构建有三种方式,StoryBoard,xib文件(其实根StoryBoard差不多,都是可以拖拽布局),或者使用纯粹的代码布局
2.1 StoryBoard
目前xcode默认布局使用故事板(StoryBoard)来构建界面,老版本的工程中则使用的XIB文件来构建,XIB是在NIB的基础上发展而来,最初苹果公司采用的是NIB来构建界面,后来文件格式采用了xml,便更名为XIB,当然现在依然是兼容XIB构建界面的,而且市面上大部分的应用就是采用xib来勾结应用界面的,怎么样使用xib构建应用界面请参考:IOS 学习笔记 使用xib文件构建界面
StoryBoard本质上是xml文件,用来描述界面的组成,如有什么视图,布局怎样,界面间的跳转导航等。如下图,目前使用的是Version 10.1 (10B61),界面如下,StoryBoard中添加控件采用拖动即可,很方便,点击a处,会出现控件区域,直接拖动到StoryBoard就好了。
2.3 XIB布局
通过XIB布局,需要修改xcode的一些配置,详细可参考IOS 学习笔记 使用xib文件构建界面,这篇文章,点击直接跳转。
2.3 纯代码布局
使用纯粹的首先需要做点准备,需要先删除ViewController和main.storyBoard等文件,具体参考《IOS 学习笔记 使用xib文件构建界面》这篇文章,有详细步骤
在做好准备后,代码布局需要在viewDidLoad方法中进行,如下我们先初始化一个UILable视图,然后设置它的背景颜色,宽高等属性,然后通过addSubView将它添加到根容器中。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UILabel *view = [[UILabel alloc]init];
view.backgroundColor = [UIColor orangeColor];
view.frame = CGRectMake(100, 100, 200, 50);//(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
view.bounds = CGRectMake(0, 0, 100, 100);//Bounds is in terms of local coordinate system 是在局部坐标系统
view.center = CGPointMake(100, 200);//设置控件位置
[self.view addSubview:view];
}