UIApplication(二)

每个app有且只有一个UIApplication对象,当程序启动的时候通过调用UIApplicationMain方法得到的。可以通过sharedApplication方法得到。
UIApplication对象的主要任务是处理用户事件的处理路径,例如分发一个UIEvent到另外一个对象去处理。UIApplication对象持有众多的UIWindow对象,因此可以组织app的展示。UIApplication对象还能处理一些资源,例如通过openURL:打开邮箱客户端或者设置界面等。
获得UIApplication对象

[UIApplication sharedApplication]

获得UIApplicationDelegate对象
[[UIApplication sharedApplication] delegate]

获得UIWindow对象
// UIWindow数组 [[UIApplication sharedApplication] windows]; // UIWindow数组中最后调用makeKeyAndVisible方法的UIWindow对象 [[UIApplication sharedApplication] keyWindow];

控制和处理UIEvent
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 分发一个event到另外一个对象去处理 [[UIApplication sharedApplication] sendAction:@selector(action: forEvent:) to:[CustomHandler sharedCustomHandler] from:self forEvent:event]; }

// 开始忽略Event [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; // ...中间调用动画等操作 // 结束忽略Event [[UIApplication sharedApplication] endIgnoringInteractionEvents];

// 晃动是否有撤销或者重做动作 [UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;

打开URL资源
// 打开设置界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

配置通知设置
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; //注册远程推送通知 [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];

// 注册 [[UIApplication sharedApplication] registerForRemoteNotifications]; // 注销 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10]; UILocalNotification *localNotif = [[UILocalNotification alloc] init]; // 时间 localNotif.fireDate = date; // 时区 localNotif.timeZone = [NSTimeZone localTimeZone]; // 间隔 localNotif.repeatInterval = NSCalendarUnitMinute; // 声音 localNotif.soundName = UILocalNotificationDefaultSoundName; // 通知内容 localNotif.alertBody = @"Local Test"; // 数字标示 localNotif.applicationIconBadgeNumber = 1; // info localNotif.userInfo = @{@"key":@"test"}; // 注册通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; // 立即通知 [[UIApplication sharedApplication] presentLocalNotificationNow:localNotif]; // 取消所有通知 [[UIApplication sharedApplication] cancelAllLocalNotifications]; // 取消特定的通知 [[UIApplication sharedApplication] cancelLocalNotification:localNotif]; // 所有的通知 NSArray *arr = [[UIApplication sharedApplication] scheduledLocalNotifications];

后台运行相关
// app状态 [[UIApplication sharedApplication] applicationState]; // 设置后台运行时间 [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:3600]; // app后台运行的时间 NSTimeInterval remainTime = [[UIApplication sharedApplication] backgroundTimeRemaining]; NSLog(@"remainTIme = %f",remainTime); // 后台刷新的状态 int state = [[UIApplication sharedApplication] backgroundRefreshStatus]; NSLog(@"state = %d",state); [[UIApplication sharedApplication] beginBackgroundTaskWithName:@"taskOne" expirationHandler:^{ }]; [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ }]; [[UIApplication sharedApplication] endBackgroundTask:1];

远程的控制相关
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [[UIApplication sharedApplication] endReceivingRemoteControlEvents];

系统的Idle Timer
// 不让手机休眠 [UIApplication sharedApplication].idleTimerDisabled = YES;

APP样式
// 隐藏状态条 [[UIApplication sharedApplication] setStatusBarHidden:YES]; [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; // 设置状态条的样式 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; [[UIApplication sharedApplication] statusBarStyle]; // 状态条的Frame [[UIApplication sharedApplication] statusBarFrame]; // 网络是否可见 [[UIApplication sharedApplication] isNetworkActivityIndicatorVisible]; // badge数字 [UIApplication sharedApplication].applicationIconBadgeNumber = 2; // 屏幕的方向 [[UIApplication sharedApplication] userInterfaceLayoutDirection];

【UIApplication(二)】设置状态条的方向
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];

    推荐阅读