IOS基本界面元素:
要在屏幕上显示内容首先要创建一个窗口承载内容,要创建一个窗口,需要一个边框(frame),含有边框信息的底层 结构就CGRect。每个能够在屏幕上显示自己的对象都有一个边框,定义了他的显示区域,不过许多高层的视图类会自动计算这一信息。其他的那些类则在视图初始化时通过一个initWithFrame的初始化方法来设置。
再来认识一个类:UIScreen。UIScreen类代表了屏幕,通过这个类我们可以获取一些想要的东东。
-
CGrectscreenBounds=[[UIScreenmainScreen]bounds];
-
CGRectviewBounds=[[UIScreenmainScreen]applicationFrame];
-
-
-
UIView
下面来认识一下UIView类,这个类继承自UIResponder,看这个名字我们就知道它是负责显示的画布,如果说把window比作画框的话。我们就是不断地在画框上移除、更换或者叠加画布,或者在画布上叠加其他画布,大小当然 由绘画者来决定了。有了画布,我们就可以在上面任意施为了。很多简单的东西我会把库里面的内容贴出来,如果东西太多贴出来就不太好,朋友们自己去库文件里面看吧。这个类在UIView.h里面。下面我们先学习一些基础的东西,其他的东东会在以后慢慢展开。
-
UIView*myView=[[UIViewalloc]initWithFrame:CGRectMake(0.0,0.0,200.0,400.0)];
我们可以把这块画布加到其他画布上,具体方法后面会讲到。我们还可以在这块画布上画上其它好玩的东东,具体情形后面会一一讲解。
UIWindow
UIWindow继承自UIView,关于这一点可能有点逻辑障碍,画框怎么继承自画布呢?不要过于去专牛角尖,画框的形状不就是跟画布一样吗?拿一块画布然后用一些方法把它加强,是不是可以当一个画框用呢?这也是为什么 一个view可以直接加到另一个view上去的原因了。
看一下系统的初始化过程(在application didFinishLauchingWithOptions里面):
-
self.window=[[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];
-
self.window.backgroundColor=[UIColorgrayColor];
-
[self.windowmakeKeyAndVisible];
首先先阐明ViewController的职责:对内管理与之关联的View,对外跟其他ViewController通信和协调。对于与之关联的View,ViewController总是在需要的时候才加载视图,并在不需要的时候卸载视图,所以也同时担当了管理应用资源的责任。理解ViewController的LifeCycle(生命周期),能够有效地管理应用资源。
ViewController的生命周期及其加载View的步骤:ViewController的初始化:从Storyboards中加载的时候,会调用initWithCode,如果不存在则调用init。之后对里面的每个对象调用awakeFromNib方法。从内存中alloc出来的情况下,调init方法。ViewController查找与其关联的view,其顺序是:1
先判断子类是否重写了loadView,如果有直接调用。之后调viewDidLoad完成View的加载。2
如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建View。3
如果initWithNibName:bundle的name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib。A
如果类名包含Controller,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;B
找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。4
如果子类没有重写的loadView,则ViewController会从StroyBoards中找或者调用其默认的loadView,默认的loadView返回一个空白的UIView对象。注意第一步,ViewController是判断子类是否重写了loadView,而不是判断调用子类的loadView之后ViewController的View是否为空。就是说,如果子类重写了loadView的话,不管子类在loadView里面能否获取到View,ViewController都会直接调viewDidLoad完成View的加载。ViewController的卸载View的步骤:1
系统发出警告或者ViewController本身调用导致didReceiveMemoryWarning被调用2
调用viewWillUnload之后释放View3
调用viewDidUnload
注意:
由于Controller加载View时,会自动将一些View对象指向其对应的IBOutlet变量。所以当view被卸载时我们必须在viewDidUnload将这些变量release掉,ViewController不会自动做这件事。
具体做法是将变量设置为空,(注意和dealloc中将变量release的区别)注意此时Controller的view属性是空的。
在ViewController的生命周期的各个阶段,我们都有责任去适当的创建和销毁对象,具体各个阶段要做的事情,见官方文档的表Managing
Memory Efficiently
注:本文中的ViewController即视图控制器,根类是UIViewController。View是视图,根类是UIView。
转载并整理自:
http://blog.csdn.net/iukey/article/details/7083165
http://blog.csdn.net/wihing/article/details/7314702
相关推荐
1.支持展开折叠的弹出菜单的实现思路: 1.1将弹出视图添加到keyWindow,蒙版也添加到主窗口(主要原因是点击屏幕的空白处,需要隐藏弹出视图) 1.2展示的时候,动画从右上角往左下...3. 疑问解答,请关注公众号:iOS逆向
本文详细的讲述了iOS 的生命周期,以及出发的方法
iOS的聊天消息界面视图:JSQMessagesViewController
iOS-Github上15种弹出视图(Popup View)源码
iOS 视图层次结构调试 DebugView ,DebugView 是简单的调试视图层次结构的方法。
* @param view 轮播视图加载的父视图 */ (void)collectionViewWithFrame:(CGRect)frame imageArray:(NSArray *)imageArray Direction:(UICollectionViewScrollDirection)direction timeInterval:(CGFloat )...
iOS常用视图切换动画 博客文章:http://blog.csdn.net/z251257144/article/details/8230025
在window层添加控件 可以设置window后面视图是否接受点击事件
ios应用源码之效果不错的view视图滑动切换效果 .
ios 多视图切换 演示了ios中如何切换视图,切换的同时如何设置动画,和有关内存告急时的释放处理方式
一个iOS自定义视图,显示弹出窗口视图.zip
iOS 弹出视图集成
可以实现动态添加需要的视图,例如button或者是imageview,对有需要上传多张图片的应用很有用。
IOS布局控件使用自定义UITableViewCell 欢迎界面后台获取功能等项目设计IOS源码合集: ios三级展开列表TQMultistageTableView_10802 ios个性化每个tableMHNibTableViewCell ios分页的滚动视图 IOS可扩展底部TablBar ...
简易的iOS开发切换视图示例, 适合新手
ios 表视图使用的例子,初步介绍了一些相关的东西
任意时刻任意地方向window添加任意数量的view或viewcontroller,其在window的层级很那管理,该demo把所有的view和viewcontroller管理起来。实现向window最后添加的view或viewcontroller在最前面。
应用程序的生命周期
ios应用源码之多种view视图切换效果 .
较为典型的ios自定义视图 自定义视图多用来呈现出现频率较高的视图