《IOS应用开发教程》.ppt
《《IOS应用开发教程》.ppt》由会员分享,可在线阅读,更多相关《《IOS应用开发教程》.ppt(88页珍藏版)》请在麦多课文档分享上搜索。
1、IOS应用开发教程,QQ学习群:262779381,http:/,第五章 IOS基础界面编程,QQ学习群:262779381,教学目标: 1、掌握IOS开发基本界面布局。 2、掌握UIWindow与UIView的关系,并掌握UIView常见子类的使用方法。 3、掌握IOS中的坐标系统。 4、IOS中常用控件的使用。,QQ学习群:262779381,5.1UIWindow和UIView,在IOS平台上运行的应用程序都有一个UIApplication类的对象,UIApplication类继承域UIResponder类,它是IOS应用程序的起点,并且负责初始化和显示UIWindow,它还将接受事件,
2、通过委托“UIAppliactionDelegate”来处理,还有一重要的功能就是帮助管理应用程序的生命周期。,QQ学习群:262779381,应用程序状态表,QQ学习群:262779381,QQ学习群:262779381,正如在上表与图中看到的几个程序状态,系统要做出不同的事件处理。UIApplication的一个主要人任务就是处理用户事件,它会创建一个队列,将所有用户事件都放入队列中,在处理过程中,它会发送当前事件到一个合适处理事件的控件。换句话说,UIApplication类并不具体实现某项功能,它只是负责监听事件,当需要实际完成工作时,就将工作分配给UIApplicationDeleg
3、ate去完成。而在UIApplicationDelegate中定义了很多协议需要实现。这些协议中定义好的方法就是UIApplication对象监听到系统变化的时候通知UIApplication对象代理类执行的相应方法。,QQ学习群:262779381,1. -(void)applicationWillResignActive:(UIApplication*)application 此方法在应用程序将要进入到非活动状态执行,在此期间,应用程序不接受消 息。 2. -(void)applicationDidBecomeActive:(UIApplication*)application此方法在应用
4、程序将要进入到活动状态执行,和第一个方法相反。 3. -(void)applicationDidReceiveMemoryWarning:(UIApplication*)application执行这个方法可以进行内存清理防止程序被太多内存所占用而导致终止。 4. -(void)applicationDidFinishLaunching:(UIApplication*)application 这个方法的功能是在程序载入后可以执行一些用户需要的操作。 5-(void)applicationDidEnterBackground:(UIApplication*)application这个方法是在程序被
5、推送到后台的时候调用。 注意:若在代码中提示release错误,说明程序使用了ARC(Automatic Reference Counting)机制,只需要去掉release方法,或者勾选去除ARC机制,去除方法在Building Settings中的Apple LLVM6.0 - Language-Objective-C。,QQ学习群:262779381,#import “AppDelegate.h“ implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWi
6、thOptions:(NSDictionary *)launchOptions self.window = UIWindow alloc initWithFrame:UIScreen mainScreen bounds;/ Override point for customization after application launch.self.window.backgroundColor = UIColor cyanColor;self.window makeKeyAndVisible;return YES; - (void)applicationWillResignActive:(UIA
7、pplication *)application NSLog(“应用正处于非活动状态!“); - (void)applicationDidEnterBackground:(UIApplication *)application NSLog(“应用已经在后台!“); - (void)applicationWillEnterForeground:(UIApplication *)application NSLog(“应用正处前台!“); - (void)applicationDidBecomeActive:(UIApplication *)application NSLog(“应用正处于活动状态!
8、“); - (void)applicationWillTerminate:(UIApplication *)application NSLog(“应用将被终止!“); end,QQ学习群:262779381,我们知道在Mac OS中,是支持多窗口任务的,但是在IOS应用程序中一般只有一个窗口,表示为一个UIWindow类,IOS是单窗口多视图的一个系统。UIWindow类一个应用程序最为基础的一个类,这就像我们的一个画布,UIWindow就是最底层的画布,我们需要做的就是往窗口中加入各种视图,来完善我们的“绘画作品”。UIWindow其实也是一个视图,因为它的父类是UIView。我们在创建一个
9、应用程序时,系统会自动为我们创建一个UIWindow。,QQ学习群:262779381,5.1.1窗口和视图,- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions self.window = UIWindow alloc initWithFrame:UIScreen mainScreen bounds autorelease;self.window.backgroundColor = UIColor cyanColor;self.w
10、indow makeKeyAndVisible;return YES; 在应用程序载入的时候,系统就创建了一个UIWindow窗口作为基本的窗口,并设置了他尺寸等于物理设备的尺寸,通过UIScreen mainScreen bounds这条语句能获得不同设备当前的屏幕尺寸,可以通用与多种设备之间。最后让窗口显示在屏幕上。我们一般不用去考虑对窗口的操作,一般的操作都建立在视图上,但我们要了解窗口和视图之间的框架结构关系。,QQ学习群:262779381,视图是UIView类的实例,它负责在屏幕上绘制一个矩形区域。视图的作用主要体现在用户界面的显示以及相应用户界面交互上。UIView有父视图(su
11、perview)和子视图(subview)属性,而通过定义这两个属性,可以建立视图之间的层次关系,并且这两个属性还关系到视图坐标的确定。 有3个和视图相关的结构体,分别是: CGPointx,y 代表了所在视图的坐标信息 CGSizewidth,height 代表了所在视图的大小信息 CGRectorigin,size所在视图所在坐标(视图左上角的点)和大小信息 还有3个相对应的函数 CGPointMake(x,y) 声明了位置信息 CGSizeMake(width,height) 声明了大小信息 CGRectMake(x,y,width,height) 声明了位置和大小信息,QQ学习群:26
12、2779381,- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions /创建窗口 self.window = UIWindow alloc initWithFrame:UIScreen mainScreen bounds autorelease; self.window.backgroundColor = UIColor cyanColor; /创建视图UIView *baseView = UIView allocinitWithF
13、rame:CGRectMake(10, 50, 300, 400);baseView.backgroundColor = UIColor blackColor;self.window addSubview:baseView;baseView release;self.window makeKeyAndVisible;return YES; ,QQ学习群:262779381,在使用UIView时,视图的坐标位置是一个很重要的信息,IOS中描述视图的坐标位置的属性有三个,分别是frame、bounds和center,初学者对前两个属性的使用上可能会有混淆,下面我们共同来学习一下IOS中坐标系统。
14、翻开IOS官方文档,我们可以看到对frame和bounds有如下的描述: Views location and size expressed in two waysFrame is in terms of superviews coordinate systemBounds is in terms of local coordinate system 我们来稍微解释一下它们的用法,frame属性是用来描述当前视图在父视图中的坐标位置和大小;bounds属性是描述当前视图在其自身坐标系统中的位置和大小。;而center属性则是描述了当前视图的中心点在其父视图中的位置。通过前面的描述,我们可以看出
15、虽然frame属性和bounds属性都是用来描述视图的大小(CGSize)和位置(CGPoint)的,但是他们各自描述的视图不同,换句话说,两者所在的坐标系是不同的。,QQ学习群:262779381,5.1.2IOS坐标系统,4. self.window = UIWindow alloc initWithFrame:UIScreen mainScreenbounds; 5. self.window.backgroundColor = UIColor whiteColor; 6. UIView *view1 = UIView allocinit; 7. view1.frame = CGRectM
16、ake(0, 0, 320, 570); 8. view1.backgroundColor = UIColor yellowColor; 9. self.window addSubview:view1; 10. view1 release; 11. UIView *view2 = UIView allocinitWithFrame:CGRectMake(100, 100, 120, 200); 12. view2.backgroundColor = UIColor cyanColor; 13. view1 addSubview:view2; 14. view2 release; 15. NSL
17、og(“view2.frame.origin.x = %.1f“,view2.frame.origin.x); 16. NSLog(“view2.frame.origin.y = %.1f“,view2.frame.origin.y); 17. NSLog(“view2.bounds.origin.x = %.1f“,view2.bounds.origin.x); 18. NSLog(“view2.bounds.origin.y = %.1f“,view2.bounds.origin.y); 19. UIView *view3 = UIView allocinitWithFrame:CGRec
18、tMake(0, 0, 100, 100); 20. view3.backgroundColor = UIColor blackColor; 21. view1 addSubview:view3; 22. view3 release; 23. NSLog(“view3.frame.origin.x = %.1f“,view3.frame.origin.x); 24. NSLog(“view3.frame.origin.y = %.1f“,view3.frame.origin.y); 25. NSLog(“view3.bounds.origin.x = %.1f“,view3.bounds.or
19、igin.x); 26. NSLog(“view3.bounds.origin.y = %.1f“,view3.bounds.origin.y); 27. self.window makeKeyAndVisible; 28.return YES;,QQ学习群:262779381,在这个程序中,我们定义了3个视图,view1的大小和iPhone4的屏幕大小相同,320*480,view2是view1的子视图,而view3则是view2的子视图。我们在前面说过,不同的视图层次关系会影响到视图的坐标位置,frame属性是以父视图的坐标位置为基准,我们看到view2的frame属性值是在父视图坐标为(
20、100,100)处,视图左上角的坐标点是(100,100),而bounds属性值是本视图坐标系的原点,所以是(0,0),所以bounds值都为本视图的原点坐标,所以都是(0,0)(也可以通过setbounds值来改变坐标的原点);我们再看view3的frame值,通过效果图可能更能够理解。这里需要注意内存管理的问题,在将view2添加到view1父视图中后,就可以对view2进行内存释放。,QQ学习群:262779381,我们看到view3的frame值是(0,0),但是它并不是出于屏幕的左上角,而是出于父视图坐标原点的位置,如果我改变view3的父视图,那它的位置就会有所改变。例如我将vie
21、w3的父视图设置为view2,将view1 addsubview:view3代码改为view2 addsubview:view3,坐标信息不改变,我们来看一下运行截图,效果如图5-4所示。我们看到虽然坐标的信息没有改变,但是因为父视图的改变,view3在屏幕中的位置也出现了变化,读者可以自行分析具体的变化情况。通常我们在设置视图的坐标位置时,是使用frame属性,bounds属性一般运用的比较少,通过frame属性操作,可以很清晰的体现出视图之间的层次关系。接下来我们就介绍视图之间的层次关系。,QQ学习群:262779381,我们把UIView层次结构看成数据结构中的树型结构,一个视图可以有多
22、个子视图,但是只能有一个父视图(基视图)。在我们添加子视图时,最后添加的视图会显示在最顶层,有点类似绘图工具中图层的概念。其实在前面的章节我们也了解了视图之间的层次关系,但是我们如果要对某个视图进行操作,或者改变层次之间的关系时,该怎么样操作呢?我们一一来讲解。 添加和移除子视图添加和移除子视图是大家最常使用的操作,在添加子视图时,会进行一次retain操作,而移除子视图则会调用release消息,这些是自动完成,我们只需要了解各个时刻的引用计数即可。前面我们提到了添加子视图的操作就是UIView addSubview:Subview,就不做过多的解释。下面我们在程序清单IOS Coordin
23、ate的基础上将view3从父视图中删除,并且来看一下引用计数的情况。,QQ学习群:262779381,5.1.3视图的层次关系及常用属性,1. UIView *view3 = UIView allocinitWithFrame:CGRectMake(0, 0, 100, 100); 2. view3.backgroundColor = UIColor blackColor; 3. view1 addSubview:view3; 4. NSLog(“view3.frame.origin.x = %.1f“,view3.frame.origin.x); 5. NSLog(“view3.frame
24、.origin.y = %.1f“,view3.frame.origin.y); 6. NSLog(“view3.bounds.origin.x = %.1f“,view3.bounds.origin.x); 7. NSLog(“view3.bounds.origin.y = %.1f“,view3.bounds.origin.y); 8. /retainCount = 2 9. NSLog(“retainCount = %d“,view3 retainCount); 10. view3 removeFromSuperview; 11. /retainCount = 1 12. NSLog(“
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
本资源只提供5页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IOS 应用 开发 教程 PPT
