ios UIApplication简单使用

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

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

获得UIApplication对象

 [UIApplication sharedApplication]

获得UIApplicationDelegate对象

1
[[UIApplication sharedApplication] delegate]

获得UIWindow对象

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

控制和处理UIEvent

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

1
2
3
{//分发一个event到另外一个对象去处理
    [[UIApplication sharedApplication] sendAction:@selector(action: forEvent:) to:[CustomHandler sharedCustomHandler] from:self forEvent:event];
}
1
2
3
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; //开始忽略Event
//...中间调用动画等操作
[[UIApplication sharedApplication] endIgnoringInteractionEvents];   //结束忽略Event
1
[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;  //晃动是否有撤销或者重做动作

打开URL资源 

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

配置通知设置 

 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;

1
2
UIUserNotificationSettings  *mySettings  = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; //注册远程推送通知
1
2
[[UIApplication sharedApplication] registerForRemoteNotifications];//注册
[[UIApplication sharedApplication] unregisterForRemoteNotifications];//注销
1
2
3
4
5
6
7
8
9
10
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]; //注册通知
1
2
3
4
5
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotif]; //立即通知
[[UIApplication sharedApplication] cancelAllLocalNotifications]; //取消所有通知
[[UIApplication sharedApplication] cancelLocalNotification:localNotif]; //取消特定的通知
 
NSArray *arr = [[UIApplication sharedApplication] scheduledLocalNotifications];  //所有的通知

后台运行相关 

     [[UIApplication sharedApplication] applicationState]; //app状态  

1
2
3
4
5
6
7
8
9
10
[[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];

1
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];

系统的Idle Timer 

1
[UIApplication sharedApplication].idleTimerDisabled = YES; //不让手机休眠

APP样式 

    //隐藏状态条

    [[UIApplication sharedApplication] setStatusBarHidden:YES];

1
2
3
4
5
6
7
8
9
10
11
12
[[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

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

通知 

UIApplicationBackgroundRefreshStatusDidChangeNotification

UIApplicationDidBecomeActiveNotification

UIApplicationDidChangeStatusBarFrameNotification

UIApplicationDidChangeStatusBarOrientationNotification

UIApplicationDidEnterBackgroundNotification

UIApplicationDidFinishLaunchingNotification

UIApplicationDidReceiveMemoryWarningNotification

UIApplicationProtectedDataDidBecomeAvailable

UIApplicationProtectedDataWillBecomeUnavailable

UIApplicationSignificantTimeChangeNotification

UIApplicationUserDidTakeScreenshotNotification

UIApplicationWillChangeStatusBarOrientationNotification

UIApplicationWillChangeStatusBarFrameNotification

UIApplicationWillEnterForegroundNotification

UIApplicationWillResignActiveNotification

UIApplicationWillTerminateNotification

UIContentSizeCategoryDidChangeNotification

 

posted @   孙富有(iOS工程师)  阅读(1902)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
点击右上角即可分享
微信分享提示