UIApplication详解

jopen 10年前

每个app有且只有一个UIApplication对象,当程序启动的时候通过调用UIApplicationMain方法得到的。可以通过sharedApplication方法得到。

UIApplication对象的主要任务是处理用户事件的处理路径,例如分发一个UIEvent到另外一个对象去处理。UIApplication对象持有众多的UIWindow对象,因此可以组织app的展示。UIApplication对象还能处理一些资源,例如通过openURL:打开邮箱客户端或者设置界面等。

获得UIApplication对象


[UIApplication sharedApplication]
获得UIApplicationDelegate对象
[[UIApplication sharedApplication] delegate]
获得UIWindow对象
[[UIApplication sharedApplication] windows];   //UIWindow数组  [[UIApplication sharedApplication] keyWindow]; //UIWindow数组中最后调用makeKeyAndVisible方法的UIWindow对象
控制和处理UIEvent


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  {//分发一个event到另外一个对象去处理      [[UIApplication sharedApplication] sendAction:@selector(action: forEvent:) to:[CustomHandler sharedCustomHandler] from:self forEvent:event];  }
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; //开始忽略Event  //...中间调用动画等操作  [[UIApplication sharedApplication] endIgnoringInteractionEvents];   //结束忽略Event
[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;  //数字标示      localNotif.userInfo = @{@"key":@"test"};    //info      [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; //注册通知
    [[UIApplication sharedApplication] presentLocalNotificationNow:localNotif]; //立即通知      [[UIApplication sharedApplication] cancelAllLocalNotifications]; //取消所有通知      [[UIApplication sharedApplication] cancelLocalNotification:localNotif]; //取消特定的通知            NSArray *arr = [[UIApplication sharedApplication] scheduledLocalNotifications];  //所有的通知
后台运行相关


    [[UIApplication sharedApplication] applicationState]; //app状态        [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:3600]; //设置后台运行时间      NSTimeInterval remainTime = [[UIApplication sharedApplication] backgroundTimeRemaining]; //app后台运行的时间      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 sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];
数据类型


UIBackgroundTaskIdentifier : Int
typedef enum : NSUInteger {     UIRemoteNotificationTypeNone    = 0,     UIRemoteNotificationTypeBadge   = 1 << 0,     UIRemoteNotificationTypeSound   = 1 << 1,     UIRemoteNotificationTypeAlert   = 1 << 2,     UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3  } UIRemoteNotificationType;
typedef enum : NSInteger {     UIStatusBarStyleDefault,     UIStatusBarStyleLightContent,          UIStatusBarStyleBlackTranslucent,     UIStatusBarStyleBlackOpaque  } UIStatusBarStyle;
typedef enum : NSInteger {     UIStatusBarAnimationNone,     UIStatusBarAnimationFade,     UIStatusBarAnimationSlide,  } UIStatusBarAnimation;
typedef enum : NSInteger  {     UIApplicationStateActive ,     UIApplicationStateInactive ,     UIApplicationStateBackground   } UIApplicationState;
const UIBackgroundTaskIdentifier  UIBackgroundTaskInvalid ;  const NSTimeInterval  UIMinimumKeepAliveTimeout;
typedef enum : NSUInteger  {     UIBackgroundFetchResultNewData ,     UIBackgroundFetchResultNoData ,     UIBackgroundFetchResultFailed   } UIBackgroundFetchResult;
const NSTimeInterval  UIApplicationBackgroundFetchIntervalMinimum ;  const NSTimeInterval  UIApplicationBackgroundFetchIntervalNever;
typedef enum : NSUInteger  {     UIBackgroundRefreshStatusRestricted ,     UIBackgroundRefreshStatusDenied ,     UIBackgroundRefreshStatusAvailable   } UIBackgroundRefreshStatus;
typedef enum : NSInteger  {     UIInterfaceOrientationUnknown             = UIDeviceOrientationUnknown ,     UIInterfaceOrientationPortrait            = UIDeviceOrientationPortrait ,     UIInterfaceOrientationPortraitUpsideDown  = UIDeviceOrientationPortraitUpsideDown ,     UIInterfaceOrientationLandscapeLeft       = UIDeviceOrientationLandscapeRight ,     UIInterfaceOrientationLandscapeRight      = UIDeviceOrientationLandscapeLeft   } UIInterfaceOrientation;
typedef enum : NSInteger  {     UIUserInterfaceLayoutDirectionLeftToRight ,     UIUserInterfaceLayoutDirectionRightToLeft ,  } UIUserInterfaceLayoutDirection;
NSString *const  UIApplicationOpenSettingsURLString;
NSString *const  UIApplicationStatusBarOrientationUserInfoKey ;  NSString *const  UIApplicationStatusBarFrameUserInfoKey;
NSString *const  UIContentSizeCategoryExtraSmall ;  NSString *const  UIContentSizeCategorySmall ;  NSString *const  UIContentSizeCategoryMedium ;  NSString *const  UIContentSizeCategoryLarge ;  NSString *const  UIContentSizeCategoryExtraLarge ;  NSString *const  UIContentSizeCategoryExtraExtraLarge ;  NSString *const  UIContentSizeCategoryExtraExtraExtraLarge;
NSString *const  UIContentSizeCategoryAccessibilityMedium ;  NSString *const  UIContentSizeCategoryAccessibilityLarge ;  NSString *const  UIContentSizeCategoryAccessibilityExtraLarge ;  NSString *const  UIContentSizeCategoryAccessibilityExtraExtraLarge ;  NSString *const  UIContentSizeCategoryAccessibilityExtraExtraExtraLarge;
NSString *const  UIApplicationInvalidInterfaceOrientationException;
通知


UIApplicationBackgroundRefreshStatusDidChangeNotification  UIApplicationDidBecomeActiveNotification  UIApplicationDidChangeStatusBarFrameNotification  UIApplicationDidChangeStatusBarOrientationNotification  UIApplicationDidEnterBackgroundNotification  UIApplicationDidFinishLaunchingNotification  UIApplicationDidReceiveMemoryWarningNotification  UIApplicationProtectedDataDidBecomeAvailable  UIApplicationProtectedDataWillBecomeUnavailable  UIApplicationSignificantTimeChangeNotification  UIApplicationUserDidTakeScreenshotNotification  UIApplicationWillChangeStatusBarOrientationNotification  UIApplicationWillChangeStatusBarFrameNotification  UIApplicationWillEnterForegroundNotification  UIApplicationWillResignActiveNotification  UIApplicationWillTerminateNotification  UIContentSizeCategoryDidChangeNotification