UIApplication
2015-12-18 15:28
429 查看
什么是UIApplication
UIApplication对象是应用程序的象征
每一个应用都有自己的UIApplication对象,而且是单例的通过 [UIApplication sharedApplication]可以获得这个单例对象
一个iOS程序启动后创建的第一个对象就是UIApplication
利用UIApplication对象,能进行一些应用级别的操作
利用UIApplication可以做哪些应用级别的操作?
设置应用程序图标右上角的红色提醒数字
iOS8更新之后,在设置applicationIconBadgeNumber时提示错误,原因是iOS8之后设置应用程序的applicationIconBadgeNumber需要用户授权授权方式如下:
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 8.0) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; }
联网操作时,状态栏上的等待图标指示器。waiting图标
UIApplication*app = [UIApplication sharedApplication]; app.networkActivityIndicatorVisible=YES;
利用UIApplication打开某个资源
UIApplication有个功能十分强大的openURL:方法 - (BOOL)openURL:(NSURL*)url;
openURL:方法的部分功能有
打电话 UIApplication *app = [UIApplication sharedApplication]; [app openURL:[NSURL URLWithString:@"tel://10086"]];
发短信 [app openURL:[NSURL URLWithString:@"sms://10086"]];
发邮件 [app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];
打开一个网页资源 [app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
还可以打开其他app程序
通过UIApplication管理状态栏
注意
如果想利用UIApplication来管理状态栏,首先得修改Info.plist的设置
在ios7系统下,状态栏默认是交给控制器去管理的,控制器实现下面两个方法就可以控制状态栏的显示、隐藏以及样式
/** * 隐藏状态栏 */ - (BOOL)prefersStatusBarHidden { return YES; } /** * 改变状态栏样式 */ - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
在ios7系统下,状态栏要想交给UIApplication管理,要在Info.plist中设置View controller-based status bar appearance 为 NO
UIApplication *app = [UIApplication sharedApplication]; /****** 无动画 ***********/ app.statusBarHidden = YES; app.statusBarStyle = UIStatusBarStyleLightContent; /****** 有动画 ***********/ [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; [app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
UIApplication管理状态栏的好处:
可以设置动画更灵活,可以随时随地的设置状态栏样式。
UIApplication和delegate
简介
所有的移动操作系统都有个致命的缺点:app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件
delegate可处理的事件包括:
应用程序的生命周期事件(如程序启动和关闭)
系统事件(如来电)
内存警告
…
每次新建完项目,都有个带有“AppDelegate”字眼的类,它就是UIApplication的代理
NJAppDelegate默认已经遵守了UIApplicationDelegate协议,已经是UIApplication的代理
delegate方法调用时机
/** * app 启动完毕后调用(在启动图片消失后调用) */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES; }
/** * app 即将失去焦点调用 */ - (void)applicationWillResignActive:(UIApplication *)application { 一般在这个方法执行如下操作: * 暂停正在执行的任务 * 禁止计时器 * 若为游戏应暂停游戏 }
/** * app 进入后台调用(已经进入后台) */ - (void)applicationDidEnterBackground:(UIApplication *)application { 一般在这个方法执行如下操作: * 保存当前应用信息和应用状态 * 保存用户数据(写到沙盒) * 若为游戏,保存游戏积分 * 废除定时器 }
/** * app 即将进入前台调用 */ - (void)applicationWillEnterForeground:(UIApplication *)application { 这个方法用来撤销applicationWillResignActive中做的改变。 }
/** * app 获得焦点调用(已经进入前台) */ - (void)applicationDidBecomeActive:(UIApplication *)application { 这个方法用来撤销applicationDidEnterBackground中做的改变 }
/** * * app 即将终止的时候调用(要模拟该方法调用需要在Info.plist文件中设置Application does not run in background为 YES;然后从前台回到后台) * 注意:如果应用程序处于挂起状态的时候,无法调用该方法。 */ - (void)applicationWillTerminate:(UIApplication *)application { 程序即将退出时调用。记得保存数据,如applicationDidEnterBackground方法一样。 }
/** * app 接收到内容警告的时候会调用 */ - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{ 这个方法用来清除不需要再使用的内存
相关文章推荐
- Android 万能适配器
- Android 使用Fragment 替换 TabActivity
- android ListView下拉刷新之功能实现
- iOS懒加载模式
- Android 创建自定义布局
- Android apk动态加载机制的研究
- 笔记本电脑做服务器供Android手机访问
- WebAPP设计和入门开发需要注意的5个事项
- android apk 防止反编译技术第一篇-加壳技术
- Ios的nil,Null,NSNull的使用
- Android之的Shape图形使用
- ios触摸事件二 :事件传递
- iOS中assign、copy 、retain等关键字的含义
- Android学习笔记:[1]Option Menu(选项菜单)
- Android中屏幕密度和图片大小的关系分析
- iOS中常用的数据类型转换
- IOS pod使用笔记
- IOS pod使用笔记
- IOS pod使用笔记
- android 屏幕比例说明