UIApplication

1、UIApplication文件

  • 1.1 方法说明

    // 当程序载入后执行,应用程序启动入口
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    }
    
    // 应用程序将要进入非活动状态,即将进入后台
    - (void)applicationWillResignActive:(UIApplication *)application {
    
    }
    
    // 当程序被推送到后台的时候调用
    - (void)applicationDidEnterBackground:(UIApplication *)application {
    
    }
    
    // 当程序从后台将要重新回到前台时候调用
    - (void)applicationWillEnterForeground:(UIApplication *)application {
    
    }
    
    // 当应用程序进入活动状态时执行
    - (void)applicationDidBecomeActive:(UIApplication *)application {
    
    }
    
    // 当程序将要退出是被调用
    - (void)applicationWillTerminate:(UIApplication *)application {
    
    }
    
    // 系统内存不足,需要进行清理工作
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    
    }
    
    // 当系统时间发生改变时执行
    - (void)applicationSignificantTimeChange:(UIApplication *)application {
    
    }
    
    // 当StatusBar框将要变化时执行
    - (void)application:(UIApplication)application  willChangeStatusBarFrame:(CGRect)newStatusBarFrame {
    
    }
    
    // 当StatusBar框方向将要变化时执行
    - (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration {
    }
    
    // 当通过url执行
    - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {
    }
    
    // 当StatusBar框方向变化完成后执行
    - (void)application:(UIApplication*)application  didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation {
    }
    
    // 当StatusBar框变化完成后执行
    - (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame {
    }
    
    // 当一个运行着的应用程序收到一个远程的通知
    - (void)application:(UIApplication *) applicationdidReceiveRemoteNotification:(NSDictonary *) userinfo {
    
    }
    
    // 当一个应用程序成功的注册一个推送服务(APS)
    - (void)application:(UIApplication *) applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken {
    
    }
    
    // 当 APS无法成功的完成向 程序进程推送时
    - (void)application:(UIApplication *) applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *) error {
    
    }
    
    // 当一个运行着的应用程序收到一个本地的通知
    - (void)application:(UIApplication *) applicationdidReceiveLocalNotification:(UILocalNotification *)notification {
    
    }
    
  • 1.2 调用场景

    • ① 应用初次启动:
      • - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      • - (void)applicationDidBecomeActive:(UIApplication *)application
    • ② 连续点击两次Home按钮
      • - (void)applicationWillResignActive:(UIApplication *)application
    • ③ 在任务栏点击SpringBoard或者按下Home按钮
      • - (void)applicationDidEnterBackground:(UIApplication *)application
    • ④ 在任务栏中回到app
      • - (void)applicationDidBecomeActive:(UIApplication *)application
    • ⑤ 单次点击Home按钮
      • - (void)applicationWillResignActive:(UIApplication *)application
      • - (void)applicationDidEnterBackground:(UIApplication *)application
    • ⑥ 在SpringBoard中重新启动app
      • - (void)applicationWillEnterForeground:(UIApplication *)application
      • - (void)applicationDidBecomeActive:(UIApplication *)application
    • ⑦ 从顶部向下滑动打开通知中心
      • - (void)applicationWillResignActive:(UIApplication *)application
    • ⑧ 移除通知中心
      • - (void)applicationDidBecomeActive:(UIApplication *)application
    • ⑨ 从底部向上滑动打开控制中心
      • - (void)applicationWillResignActive:(UIApplication *)application
    • ⑩ 移除控制中心
      • - (void)applicationDidBecomeActive:(UIApplication *)application
    • ⑪ 来电显示

2、main方法

  • 2.1 main.m文件

    int main(int argc, char * argv[]) {
    
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }
    
  • 2.2 解释

    • 作用:main 函数中只调用了一个 UIApplicationMain 的函数,整个程序的入口可以认为从 main 交给了 UIApplicationMain 函数。
    • 函数原型:
    UIKIT_EXTERN int UIApplicationMain(int argc, 
                                     char *argv[], 
                                 NSString * __nullable principalClassName, 
                                 NSString * __nullable delegateClassName);
    
    • argc, argv[]:与 main 的两个参数相同,一个是整形,一个是指针数组。
    • principalClassName:委托方类名,这个类实时检测当前程序的运行状态,这个参数一定要是 UIApplication 类或其子类,如果参数为空 nil,默认为 UIApplication 。
    • delegateClassName:代理方类名,遵守 UIApplicationDelegate 协议,实现协议中的方法,当第三个参数中的委托方检测到当前程序状态改变时会委托第四个参数在状态改变时执行相应的操作。

3、状态栏

// 获取状态栏高度
// returns CGRectZero if the status bar is hidden,默认高度为 20.0
CGFloat height = [UIApplication sharedApplication].statusBarFrame.size.height;

// 显示/隐藏状态栏
// 需在 Info.plist 添加 key:View controller-based status bar appearance,value:NO
// statusBarHidden:YES 隐藏,NO 显示(默认)
[UIApplication sharedApplication].statusBarHidden = NO;

// 设置状态栏颜色
// 需在 info.plist 添加 key:View controller-based status bar appearance,value:NO
// 在 iOS7 版本以前直接设置就可以
// UIStatusBarStyleDefault      = 0, Dark content, for use on light backgrounds  黑色内容,默认
// UIStatusBarStyleLightContent = 1, Light content, for use on dark backgrounds  白色内容
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;   

// 风火轮旋转状态设置
// YES 开始旋转,NO 停止旋转(默认),停止时自动隐藏
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

4、UIApplication其他功能

  • 4.1 设置icon上的数字图标

//设置主界面icon上的数字图标,在2.0中引进, 缺省为0
[UIApplication sharedApplication].applicationIconBadgeNumber = 4;
  • 4.2设置摇动手势的时候,是否支持redo,undo操作

// 摇动手势,是否支持redo undo操作。
// 3.0以后引进,缺省YES
[UIApplication sharedApplication].applicationSupportsShakeToEdit =YES;
  • 4.3 判断程序运行状态

// 判断程序运行状态,在2.0以后引入
/*
 UIApplicationStateActive,
 UIApplicationStateInactive,
 UIApplicationStateBackground
*/

if([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
	NSLog(@"程序在运行状态");
}
  • 4.4 阻止屏幕变暗进入休眠状态

// 阻止屏幕变暗,慎重使用, 因为非常耗电, 默认为NO 
[UIApplication sharedApplication].idleTimerDisabled = YES;
  • 4.5 显示联网状态

// 显示联网标记 2.0
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  • 4.6 在map上显示一个地址

NSString* addressText = @"1 Infinite Loop, Cupertino, CA 95014";
// URL encode the spaces
addressText = [addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:urlText]];
  • 4.7 发送电子邮件

NSString *recipients = @"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";
NSString *body = @"&body=It is raining in sunny California!";
NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];
email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:email]];
  • 4.8 打电话到一个号码

// Call Google 411
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8004664411"]];
  • 4.9 发送短信

// Text to Google SMS
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"sms://466453"]];
  • 4.10 打开一个网址

// Lanuch any iPhone developers fav site
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];
posted @ 2018-07-06 00:32  CH520  阅读(132)  评论(0编辑  收藏  举报