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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?