iOS UIapplication最新最全详解 (转载请注明出处·2016.5)

一、属性 及解释:

+ (UIApplication *)sharedApplication;//单例

  • 1.delegate  代理
  • 2.- (void)beginIgnoringInteractionEvents; 

               - (void)endIgnoringInteractionEvents;

               - (BOOL)isIgnoringInteractionEvents; 

               这三种方法一般用于动画开始和结束设置,让动画执行期间,用户的其他触摸事件暂时不去响应。

          这样就不用弄遮罩层 了,视图上的其他控件就没法响应了,等到动画结束后才能响应。

  • 3.@property(nonatomic,getter=isIdleTimerDisabled)       BOOL idleTimerDisabled;
    用来设置屏幕是否进入睡眠,默认是 NO ,即默认是会进入睡眠的。
    一般情况下只有游戏或者是一直需要用户交互事件的才设置为 YES, 不让它空闲的时候自动进入睡眠
  • 4.- (BOOL)openURL:(NSURL*)url; //打开一个 url 资源,如果这个 url 是另外一个 app 的url ,另外一个app 将会启动。url 支持几种类型:http,https, 电话、视频聊天、email

         - (BOOL)canOpenURL:(NSURL *)url;//能否打开

  • 5. - (void)sendEvent:(UIEvent *)event; //任何事件都可以在这里被截获
  • 6.@property(nullable, nonatomic,readonly) UIWindow *keyWindow;//keywindow 是指当前活跃的window ,与用户交互的window

          @property(nonatomic,readonly) NSArray<__kindof UIWindow *>  *windows;

          //windows 是指当前app 打开的所有window, 比如键盘也在一个window 里面,alert 也在一个 window 里面。

          在 windows 数组里面, window 是根据 windowLevel 来排列的,最后一个覆盖在最上面

  • 7.- (BOOL)sendAction:(SEL)action to:(nullable id)target from:(nullable id)sender forEvent:(nullable UIEvent *)event;

           作用:发送一个由selector定义的动作消息给一个特殊目标。

  • 8.@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible //状态栏里显示联网状态的菊花 默认NO
  • 9.@property(readonly, nonatomic) UIStatusBarStyle statusBarStyle; //状态栏前景样式

           有两种:

           UIStatusBarStyleDefault//黑色文字、电池等

           UIStatusBarStyleLightContent//白色文字、电池等

  • 10.@property(readonly, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;//是否隐藏状态栏
  • 11.@property(readonly, nonatomic) UIInterfaceOrientation statusBarOrientation;//是你程序界面的当前旋转方向  这个可以设置

            有五种:(等号前是状态栏方向 后面是设备方向)

            UIInterfaceOrientationUnknown            = UIDeviceOrientationUnknown,
            UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,      
            UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
            UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
            UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft

             对比:UIDeviceOrientation     是机器硬件的当前旋转方向   这个只能取值不能设置

             有六种

              UIDeviceOrientationUnknown,                     //未知
              UIDeviceOrientationPortrait,                        // 设备垂直,home键在下
              UIDeviceOrientationPortraitUpsideDown,    // 设备垂直,home键在上
              UIDeviceOrientationLandscapeLeft,            // 设备水平,home键在右
              UIDeviceOrientationLandscapeRight,         // 设备水平,home键在左
              UIDeviceOrientationFaceUp,                      // 设备平躺,正面朝上
              UIDeviceOrientationFaceDown                  //设备平躺,正面朝下

  • 12.- (UIInterfaceOrientationMask)supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window;
  • 13.@property(nonatomic,readonly) NSTimeInterval statusBarOrientationAnimationDuration; //获取当前电池条动画改变的时间
  • 14.@property(nonatomic,readonly) CGRect statusBarFrame; //状态栏高度,如果状态栏隐藏,返回0
  • 15.@property(nonatomic) NSInteger applicationIconBadgeNumber; //icon右上角的消息个数//iOS8以后需要用户授权加上以下代码

     float version = [[[UIDevice currentDevice] systemVersion] floatValue];
     if (version >= 8.0) {
         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
         [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
     }

  • 16.@property(nonatomic) BOOL applicationSupportsShakeToEdit ;//支持摇动,使用该属性时同时让该控制器成为第一响应者,即

     [[UIApplicationsharedApplication] setApplicationSupportsShakeToEdit:YES];
    [selfbecomeFirstResponder];
  • 17.@property(nonatomic,readonly) UIApplicationState applicationState;//程序运行状态

         有三种

          UIApplicationStateActive, //正在运行
          UIApplicationStateInactive,//——正在进入 didFinishLaunchingWithOptions 里
          UIApplicationStateBackground//进入后台

  • 18.@property(nonatomic,readonly) NSTimeInterval backgroundTimeRemaining;

           - (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^ __nullable)(void))handler;
           - (UIBackgroundTaskIdentifier)beginBackgroundTaskWithName:(nullable NSString *)taskName expirationHandler:(void(^ __nullable)(void))handler;
           - (void)endBackgroundTask:(UIBackgroundTaskIdentifier)identifier;

          这几个方法都是关于程序进入后台后,所有线程都被挂起,app继续向iOS申请,在后台完成一个Long-RunningTask任务

用法:

//定义一个属性

@property (nonatomic,unsafe_unretained)UIBackgroundTaskIdentifierbackgroundTaskIdentifier;

 
 
  1. - (void)applicationDidEnterBackground:(UIApplication *)application 
  2.    //检测多任务的可用性 
  3.     if ([self isMultitaskingSupported] == NO) { 
  4.         return; 
  5.     }    
  6.     //定义要完成的任务 ,开始执行,
  7. ......
  8.  
  9. //返回一个任务标识
  10. self.backtaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void){ 
  11.         // do something 。。。
  12.  
  13. //结束该任务
  14. [[UIApplication sharedApplication] endBackgroundTask:self.backtaskIdentifier]; //将任务标识符标记为 UIBackgroundTasksInvalid,标志任务结束
  15. self.backtaskIdentifier = UIBackgroundTaskInvalid;
  16.     }];  
  17.  
  18. }

  • 19.- (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval;//app唤醒最小时间

        需要定期请求数据的程序可以在系统中注册,这样程序就可以在后台被定期唤醒来下载新的数据。这种情况需要在程序的Info.plist文件中UIBackgroundModes项增加fetch类型,同时通过setMinimumBackgroundFetchInterval:方法来设置程序定期获取数据的最小时间间隔。

   一,开启Background Fetch支持
  在XCode->TARGETS->Capabilities->Background Modes打开并添加Background Fetch.
  同时在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加:
  [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
  MinimumBackgroundFetchInterval参数值是两次Fetch时间间隔,不能保证每隔这个时间间隔都会调用。这里设置为UIApplicationBackgroundFetchIntervalMinimum,意思是尽可能频繁的调用我们的Fetch方法。
  二,增加实现Fetch方法
  - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{};
  每次系统Fetch时都会调用该方法,我们可以在该方法中做刷新数据等操作,操作执行完成以后要调用completionHandlerblock(),比如:completionHandler(UIBackgroundFetchResultNewData);文档中说系统会根据completionHandler(执行的时间)来估计此次Fetch的耗电等。如果耗时耗电比较多,可能会降低被调用的次数。但这个方法也不是不限时执行的,说是有30s的时间来执行操作。completionHandler有三个参数:
  UIBackgroundFetchResultNewData 成功拉取数据
  UIBackgroundFetchResultNoData 没有新数据
  UIBackgroundFetchResultFailed 拉取数据失败或者超时
  三,模拟Fetch事件
  在实际的IOS7环境中,Fetch事件是由系统管理的,app开发者无法预先知道Fetch事件达到的时机。但XCode也提供了Fetch事件的调试办法,在XCode上运行程序后,在Debug->Simulate Background Fetch.
  还有一种情况是app没有运行(不在前台也不在后台),被Fetch事件唤醒执行.这种情况的测试方法如下:
  Product->Scheme->Edit scheme 在Debug模式选中Options,点选Launch due to a background fetch event,运行即可。
  可以观察到当Fetch事件到来时,app先进入后台,再执行- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{}。

 

@property (nonatomic, readonly) UIBackgroundRefreshStatus backgroundRefreshStatus ;//是否开启app后台刷新功能

    UIBackgroundRefreshStatusRestricted, //设备系统不支持后台刷新
    UIBackgroundRefreshStatusDenied,     //用户拒绝后台刷新
    UIBackgroundRefreshStatusAvailable   //后台刷新可用
 //判断if ([[UIApplication sharedApplication] backgroundRefreshStatus] != UIBackgroundRefreshStatusAvailable){}

  • 20.@property(nonatomic,readonly,getter=isProtectedDataAvailable) BOOL protectedDataAvailable;//(不清楚)
  • 21.@property(nonatomic,readonly) UIUserInterfaceLayoutDirection userInterfaceLayoutDirection;

        两种;

          UIUserInterfaceLayoutDirectionLeftToRight,//从左到右的布局
          UIUserInterfaceLayoutDirectionRightToLeft,//从右到左的布局

  • 22.@property(nonatomic,readonly) NSString *preferredContentSizeCategory ;//这个是返回用户设置的系统字体大小。(设置-通用-辅助功能-更大字体)

           目前6s上我看有7个选择,即下列从1到7.(经测试,如果设置最小会打印:UICTContentSizeCategoryXS,依此类推)


       //uicontentsizecategoryextrasmall
       // uicontentsizecategorysmall
       // uicontentsizecategorymedium
       // uicontentsizecategorylarge
       // uicontentsizecategoryextralarge
       // uicontentsizecategoryextraextralarge
       // uicontentsizecategoryextraextraextralarge
       // uicontentsizecategoryaccessibilitymedium
       // uicontentsizecategoryaccessibilitylarge
       // uicontentsizecategoryaccessibilityextralarge
       // uicontentsizecategoryaccessibilityextraextralarge
       // uicontentsizecategoryaccessibilityextraextraextralarge


二、分类:远程通知 UIRemoteNotifications

//详细用法:请查看:远程推送和本地通知教程

  • 1.- (void)registerForRemoteNotifications;//注册

     //iOS8变化
<span style="color:green;">    </span><span style="color:black;">[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    [application registerForRemoteNotifications];</span>

  • 2.- (void)unregisterForRemoteNotifications;//注销
  • 3.- (BOOL)isRegisteredForRemoteNotifications;//是否注册
  • 4.- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types;//已废弃,Please use registerForRemoteNotifications and registerUserNotificationSettings: instead
  • 5.- (UIRemoteNotificationType)enabledRemoteNotificationTypes;//已废弃 Please use -[UIApplication isRegisteredForRemoteNotifications], or -[UIApplication currentUserNotificationSettings] to retrieve user-enabled remote notification and user notification settings


三、分类:本地通知 UILocalNotifications

  • 1.- (void)presentLocalNotificationNow:(UILocalNotification *)notification;//立即发送通知到本机
  • 2.- (void)scheduleLocalNotification:(UILocalNotification *)notification;  //按照配置的触发时间调用通知
  • 3.- (void)cancelLocalNotification:(UILocalNotification *)notification;//取消某个通知
  • 4.- (void)cancelAllLocalNotifications;//移除所有通知
  • 5.@property(nullable,nonatomic,copy) NSArray<UILocalNotification *> *scheduledLocalNotifications;         // 本地通知数组


四、分类 通知设置 UIUserNotificationSettings

  • 1.- (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings ;//注册通知设置
  • 2.- (nullable UIUserNotificationSettings *)currentUserNotificationSettings;//现在的通知设置


五、分类 远程控制开关 UIRemoteControlEvents

  • 1.- (void)beginReceivingRemoteControlEvents;
  • 2.- (void)endReceivingRemoteControlEvents;

       远程控制事件来源于一些外部的配件,如耳机等。用户可以通过耳机来控制视频或音频的播放。接收响应者对象需要检查事件的子类型来确定命令(如播放,子类型为UIEventSubtypeRemoteControlPlay),然后进行相应处理。

        为了响应远程控制事件,UIResponder提供了以下方法


   - (void)remoteControlReceivedWithEvent:(UIEvent *)event

          我们可以在子类中实现该方法,来处理远程控制事件。不过,为了允许分发远程控制事件,我们必须调用UIApplication的beginReceivingRemoteControlEvents方法;而如果要关闭远程控制事件的分发,则调用endReceivingRemoteControlEvents方法。

        详情请查看 :UIResponder


六、分类 UINewsstand

  • 1.- (void)setNewsstandIconImage:(nullable UIImage *)image

七、分类 UIShortcutItems

  • 1.@property (nullable, nonatomic, copy) NSArray<UIApplicationShortcutItem *> *shortcutItems;//3Dtouch相关,按压icon显示的Item。

  • 此属性用来注册3Dtouch的item,或用来获取当前注册的item

   //实例如下:
    UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];
    UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"setup" localizedTitle:@"设置" localizedSubtitle:nil icon:icon userInfo:nil];
    
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];
    UIApplicationShortcutItem * item1 = [[UIApplicationShortcutItem alloc]initWithType:@"com" localizedTitle:@"发表话题" localizedSubtitle:nil icon:icon1 userInfo:nil];
    [UIApplication sharedApplication].shortcutItems = @[item,item1];
    UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
    //如果是从快捷选项标签启动app,则根据不同标识执行不同操作,然后返回NO,防止调用
    if (shortcutItem) {
         //。。。。。。
        self.window.rootViewController = mainNav;
        [self.window makeKeyAndVisible];
//        判断先前我们设置的快捷选项标签唯一标识,根据不同标识执行不同操作
      if ([shortcutItem.type isEqualToString:@"com.my"]) {//进入搜索界面
     
        } else if ([shortcutItem.type isEqualToString:@"com"]) {//进入分享界面
        
        }
        return NO;
    }

八、分类 UIStateRestoration

  • 1.- (void)extendStateRestoration;
  • 2.- (void)completeStateRestoration;
  • 3.- (void)ignoreSnapshotOnNextApplicationLaunch;
  • 4.+ (void)registerObjectForStateRestoration:(id<UIStateRestoring>)object restorationIdentifier:(NSString *)restorationIdentifier;

九、 ————————————————delegate

1、- (void)applicationWillResignActive:(UIApplication *)application

说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了

2、- (void)applicationDidBecomeActive:(UIApplication *)application

说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反

3、- (void)applicationDidEnterBackground:(UIApplication *)application

说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可

4、- (void)applicationWillEnterForeground:(UIApplication *)application

说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。

5、- (void)applicationWillTerminate:(UIApplication *)application

说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。

6、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止

7、- (void)applicationSignificantTimeChange:(UIApplication*)application

说明:当系统时间发生改变时执行

8、- (void)applicationDidFinishLaunching:(UIApplication*)application

说明:当程序载入后执行

9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame

说明:当StatusBar框将要变化时执行

10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:

(UIInterfaceOrientation)newStatusBarOrientation

duration:(NSTimeInterval)duration

说明:当StatusBar框方向将要变化时执行

11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

说明:当通过url执行

12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation

说明:当StatusBar框方向变化完成后执行

13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame

说明:当StatusBar框变化完成后执行


原文:http://blog.csdn.net/hdfqq188816190/article/details/51442236









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值