UI用户界面简介
对应开发环境:Cocoa Touch
Cocoa:苹果公司为Mac OS X系统所提供的面向对象的集成开发环境,核心框架是FoundationKit及ApplicationKit;
Cocoa Touch:苹果公司为iOS系统提供的面向对象的集成开发环境,与Cocoa不同的是其中集成了多点触碰的处理,核心框架是FoundationKit及UIKit。对应系统:iOS8
对应设备:iPhone、iPad、iPod Touch
对应设备分辨率:
320x480:iPhone4
320x568:iPhone5、iPhone5S、iPod Touch
1024x768:iPad开发工具:Xcode6、iOS Simulator、真机调试
iPhone SDK
iPhone SDK是苹果公司提供的iPhone开发工具包;
包括界面开发工具、集成开发工具、框架工具、编译器、开发样本和一个模拟器;
iOS工程创建方法
- 打开Xcode -> Create a new Xcode project或File -> New -> Project;
- 选择工程环境及模版,iOS Application -> Empty Application;
配置工程信息:
Product Name:工程名称
Organization Name:组织名、机构名称
Company Identifier:公司标识(与证书及描述文件有关)
Language:开发语言
Devices:工程对应的设备
Use Core Data:使用CoreData存储选择工程的存储路径完成创建。
iOS程序基本结构
Main函数
- 创建自动释放池
@autoreleasepool
,跳转到UIApplicationMain
函数。
UIApplicationMain函数:
- 处理运行所需的实际工作。
- 需要传入的参数包含应用程序委托类名。
UIApplicationDelegate
- 负责处理关键的系统消息
AppDelegate
- 实现了UIApplicationDelegate协议方法,作为程序的主入口。
NSStringFromClass函数
- 此函数根据一个Class参数生成一个字符串。
iOS程序生命周期
(1) 用户点击启动程序,进入main函数并将控制权交给UIApplicationMain,开始程序的生命周期;
(2) AppDelegate实现UIApplicationDelegate协议接收并处理程序状态信息;
注意:AppDelegate中是开发人员可操作的部分,作为程序的入口。
(3) 程序进入事件循环,接收并处理用户的交互信息;
(4) 程序结束或暂停(终结程序或切换到其它程序)
委托方法:
(1)程序加载完成,应用程序首次启动时调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"%@", NSStringFromSelector(_cmd));
return YES;
}
(2)应用程序将要进入非活跃状态,用户点击Home键时
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%@", NSStringFromSelector(_cmd));
}
(3)程序进入后台运行时,前提是程序支持后台
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
(4)程序即将进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
(5)程序处于活跃状态:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
(6)程序即将结束:异常结束
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- 注意:当程序被中断时,我们应该进行的处理包括:
停止Timer和其他周期性的任务
停止任何正在运行的请求(支持后台运行的可以保留)
暂停视频的播放
如果是游戏那就暂停它
UIWindow
UIWindow基本介绍
- UIWindow:程序的窗口,作为设备的主窗口存在,容纳所有的界面元素(界面对象)。
- 一个工程一定需要一个UIWindow窗口对象,并且同一时间仅有一个UIWindow被激活。
- iOS程序默认一个应用程序只有一个主窗口。
初始化方法
- 获取主屏幕大小来初始化window
- initWithFrame:标准的视图初始化方法,接收一个CGRect结构体类型来指定视图的位置和大小
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIWindow优先等级
- UIWindowLevelNormal:普通window
- UIWindowLevelStatusBar:状态栏级window
- UIWindowLevelAlert:警示级window
注意:它们的优先级依次由低到高,优先级别决定了window的显示和交互优先度。
_window.windowLevel = UIWindowLevelNormal;
window上可直接添加其他视图
调用:- (void)addSubview:(UIView *)view;
注意:一般情况下,我们遵循MVC设计模式,先设置根视图控制器(rootViewController),让根视图控制器去执行视图的加载与切换。
_window.rootViewController = [[UIViewController alloc] init];
将window作为程序的主窗口,并呈现出来
[_window makeKeyAndVisible];
完整代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 输出当前方法名称
// _cmd:表示当前方法的选择器,SEL类型
NSLog(@"%@", NSStringFromSelector(_cmd));
// UIWindow:程序的窗口,作为设备的主窗口存在,容纳所有的界面元素(界面的对象)
// 一个工程一定需要一个UIWindow窗口对象,并且同一时间仅有一个UIWindow被激活
// initWithFrame:标准的视图初始化方法,接收一个CGRect结构体类型来指定视图的位置和大小
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 设置Window等级
_window.windowLevel = UIWindowLevelNormal;
// 设置根视图控制器
_window.rootViewController = [[UIViewController alloc] init];
// 将window作为应用程序的主窗口并呈现出来
[_window makeKeyAndVisible];
return YES;
}