iOS开发中的UIApplication

UIApplication

什么是UIApplication

UIApplication对象是应用程序的象征

  • 每一个应用都有自己的UIApplication对象,而且是单例的
  • 通过 [UIApplication sharedApplication]可以获得这个单例对象
  • 一个iOS程序启动后创建的第一个对象就是UIApplication
  • 利用UIApplication对象,能进行一些应用级别的操作

利用UIApplication可以做哪些应用级别的操作?

设置应用程序图标右上角的红色提醒数字

  • iOS8更新之后,在设置applicationIconBadgeNumber时提示错误,原因是iOS8之后设置应用程序的applicationIconBadgeNumber需要用户授权

  • 授权方式如下:

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

联网操作时,状态栏上的等待图标指示器。waiting图标

UIApplication*app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible=YES;

利用UIApplication打开某个资源

  • UIApplication有个功能十分强大的openURL:方法
    - (BOOL)openURL:(NSURL*)url;
openURL:方法的部分功能有
打电话
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString:@"tel://10086"]];

发短信
[app openURL:[NSURL URLWithString:@"sms://10086"]];
发邮件
[app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];

打开一个网页资源
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];

还可以打开其他app程序

通过UIApplication管理状态栏

注意

如果想利用UIApplication来管理状态栏,首先得修改Info.plist的设置

这里写图片描述

在ios7系统下,状态栏默认是交给控制器去管理的,控制器实现下面两个方法就可以控制状态栏的显示、隐藏以及样式
    /**
     *  隐藏状态栏
     */
    - (BOOL)prefersStatusBarHidden {
        return YES;
    }
    /**
     *  改变状态栏样式
     */
    - (UIStatusBarStyle)preferredStatusBarStyle {
        return UIStatusBarStyleLightContent;
    }
在ios7系统下,状态栏要想交给UIApplication管理,要在Info.plist中设置View controller-based status bar appearance 为 NO
    UIApplication *app = [UIApplication sharedApplication];
    /****** 无动画 ***********/
    app.statusBarHidden = YES;
    app.statusBarStyle = UIStatusBarStyleLightContent;
    /****** 有动画 ***********/
    [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    [app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
UIApplication管理状态栏的好处:
  • 可以设置动画
  • 更灵活,可以随时随地的设置状态栏样式。

UIApplication和delegate

简介

  • 所有的移动操作系统都有个致命的缺点:app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止

  • 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件

  • delegate可处理的事件包括:
    应用程序的生命周期事件(如程序启动和关闭)
    系统事件(如来电)
    内存警告

  • 每次新建完项目,都有个带有“AppDelegate”字眼的类,它就是UIApplication的代理

  • NJAppDelegate默认已经遵守了UIApplicationDelegate协议,已经是UIApplication的代理

delegate方法调用时机

/**
 *  app 启动完毕后调用(在启动图片消失后调用)
 */
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}

/**
 *  app 即将失去焦点调用
 */
- (void)applicationWillResignActive:(UIApplication *)application {
    一般在这个方法执行如下操作:
        * 暂停正在执行的任务
        * 禁止计时器
        * 若为游戏应暂停游戏
}
/**
 *  app 进入后台调用(已经进入后台)
 */
- (void)applicationDidEnterBackground:(UIApplication *)application {
     一般在这个方法执行如下操作:
        * 保存当前应用信息和应用状态
        * 保存用户数据(写到沙盒)
        * 若为游戏,保存游戏积分
        * 废除定时器
}
/**
 *  app 即将进入前台调用
 */
- (void)applicationWillEnterForeground:(UIApplication *)application {
    这个方法用来撤销applicationWillResignActive中做的改变。
}
/**
 *  app 获得焦点调用(已经进入前台)
 */
- (void)applicationDidBecomeActive:(UIApplication *)application {
    这个方法用来撤销applicationDidEnterBackground中做的改变
}
/**
 *
 *  app 即将终止的时候调用(要模拟该方法调用需要在Info.plist文件中设置Application does not run in background为 YES;然后从前台回到后台)
 *   注意:如果应用程序处于挂起状态的时候,无法调用该方法。
 */

- (void)applicationWillTerminate:(UIApplication *)application {
    程序即将退出时调用。记得保存数据,如applicationDidEnterBackground方法一样。
}
/**
 *  app 接收到内容警告的时候会调用
 */
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
    这个方法用来清除不需要再使用的内存
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS开发实现Twitter登录功能的Demo可以按照以下步骤进行: 1. 首先,在Twitter开发者网站上创建一个应用,获取应用的API Key和Secret Key,并将它们添加到项目的Info.plist文件的URL schemes和URL whitelist。 2. 在AppDelegate导入Twitter框架并添加以下代码: ```swift import TwitterKit func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { TWTRTwitter.sharedInstance().start(withConsumerKey: "YOUR_API_KEY", consumerSecret: "YOUR_API_SECRET") return true } ``` 3. 在需要实现登录的ViewController导入Twitter框架并添加以下代码: ```swift import TwitterKit @IBAction func twitterLoginButtonTapped(_ sender: UIButton) { TWTRTwitter.sharedInstance().logIn { (session, error) in if (session != nil) { print("Twitter login successful with user ID: \(session!.userID)") } else { print("Twitter login error: \(error!.localizedDescription)") } } } ``` 在上述代码,当用户点击Twitter登录按钮时,调用`TWTRTwitter.sharedInstance().logIn`方法会打开Twitter登录界面,用户在该界面上登录成功后,会返回一个session,其包含用户的userID和token等信息。根据返回的session是否为nil,判断登录是否成功。 注意:在使用此Demo之前,需要在项目的Build Settings的Other Linker Flags添加`-ObjC`标志,否则可能会出现链接错误。 以上就是实现Twitter登录功能的iOS开发Demo。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值