iOS大神班笔记03-UIApplication
UIApplication简介:
- UIApplication对象是应用程序的象征。
- 每一个应用程序都有自己的UIApplication对象,而且是单例。
- 一个iOS程序启动后创建的第一个对象就是UIApplication对象。
- 通过
UIApplication *app = [UIApplication sharedApplication];
可以获得这个单例对象。 - 利用UIApplication对象能进行一些应用级别的操作。
利用UIApplication对象能进行一些应用级别的操作。
- 设置应用程序图标右上角的红色提醒数字
@property(nonatomic) NSInteger applicationIconBadgeNumber;
//代码实现和效果 UIApplication *app = [UIApplication sharedApplication]; app.applicationIconBadgeNumber = 10; // 创建通知对象 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil]; // 注册用户通知 [app registerUserNotificationSettings:setting];注:苹果为了增强用户体验,在iOS8以后我们需要创建通知才能实现图标右上角提醒,iOS8之前直接设置
applicationIconBadgeNumber
的值即可。
- 设置联网指示器的可见性
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; //代码实现和效果 app.networkActivityIndicatorVisible= YES;
-
管理状态栏
从iOS7开始,系统提供了2种管理状态栏的方式
a.通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)在iOS7中,默认情况下,状态栏都是由UIViewController管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式状态栏的样式 - (UIStatusBarStyle)preferredStatusBarStyle;
状态栏的可见性 -(BOOL)prefersStatusBarHidden;
#pragma mark-设置状态栏的样式 -(UIStatusBarStyle)preferredStatusBarStyle { //设置为白色 //return UIStatusBarStyleLightContent; //默认为黑色 return UIStatusBarStyleDefault; } #pragma mark-设置状态栏是否隐藏(否) -(BOOL)prefersStatusBarHidden { return NO; }
b.通过UIApplication管理(一个应用程序的状态栏都由它统一管理)如果想利用UIApplication来管理状态栏,首先得修改Info.plist的设置,添加选中行,并设置为NO即可,这篇文章中有详细介绍iOS中用application 来管理电池栏状态
代码://通过sharedApplication获取该程序的UIApplication对象 UIApplication *app=[UIApplication sharedApplication]; //设置状态栏的样式 //app.statusBarStyle=UIStatusBarStyleDefault;//默认(黑色) //设置为白色+动画效果 [app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; //设置状态栏是否隐藏 app.statusBarHidden=YES; //设置状态栏是否隐藏+动画效果 [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
c.总结
如果状态栏的样式只设置一次,那就用UIApplication来进行管理,并且UIApplication可以提供动画效果;
如果状态栏是否隐藏,样式不一那就用每个控制器对自己的状态栏进行管理。 -
openURL:方法
UIApplication有个功能十分强大的openURL:方法- (BOOL)openURL:(NSURL*)url;
openURL:方法的部分功能有UIApplication *app = [UIApplicationsharedApplication]; 打电话 [app openURL:[NSURLURLWithString:@"tel://110"]]; 发短信 [app openURL:[NSURLURLWithString:@"sms://10086"]]; 发邮件 [app openURL:[NSURLURLWithString:@"mailto://xxcc@fox.com"]]; 打开一个网页资源 [app openURL:[NSURL URLWithString:@"http://www.baidu.com"]]; 打开其他app程序 openURL方法,可以打开其他APP。
系统内部根据不同的头标示来做出不同的相应。
-
判断程序运行状态
//判断程序运行状态 /* UIApplicationStateActive, UIApplicationStateInactive, UIApplicationStateBackground */ UIApplication *app = [UIApplication sharedApplication]; if(app.applicationState ==UIApplicationStateInactive){ NSLog(@"程序在运行状态"); }
- 阻止屏幕变暗进入休眠状态
//阻止屏幕变暗,慎重使用本功能,因为非常耗电。 UIApplication *app = [UIApplication sharedApplication]; app.idleTimerDisabled =YES;
UIApplication Delegate
当app收到干扰,例如程序运行中来电等,就会产生一些系统事件,这时UIApplicaiton会通知它的代理delegate对象,让delegate代理来处理这些系统事件。
delegate可以处理的时间包括
1.应用程序的生命周期事件(如程序启动和关闭)
2.系统事件(如来电)
3.内存警告(用处较多)
每当我们创建项目时,程序中的AppDelegate文件就是UIAppliacation的代理,我们可以发现它已经遵守了UIApplicationDelegate。
@interface AppDelegate : UIResponder <UIApplicationDelegate>
下面我们来看一下AppDelegate的方法
// AppDelegate:监听应用程序的生命周期
// 以下方法就是应用程序的生命周期方法
// 应用程序启动完成的时候就会调用AppDelegate的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"%s",__func__);
return YES;
}
// 当应用程序失去焦点的时候调用
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%s",__func__);
}
// 当应用程序进入后台的时候调用
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"%s",__func__);
// 保存一些信息
}
// 当应用程序进入前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"%s",__func__);
}
// 当应用程序完全获取焦点的时候调用
// 只有当应用程序完全获取焦点的时候,才能够与用户交互
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"%s",__func__);
}
// 当应用程序关闭的时候
- (void)applicationWillTerminate:(UIApplication *)application {
}
//收到内存警告时调用
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
}