路漫漫其修远兮,吾将上下而求索。也算是对程序员的一种真实写照了吧。

今天想研究一下iOS中退出项目的方法,说是今天,其实也关注并去了解很久了。只是始终找不到自己认为很好的方法。今天就先把自己了解的列举一下,以后如果还能找到认为更好的,就在补充吧。

这里是我们在项目的AppDelegate中普遍写到的一句代码(至于扩展和丰富,我们暂不去深究):



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    LoginViewController *loginVC = [[LoginViewController alloc] init];
//    UINavigationController *homeNavigationView = [[UINavigationController alloc] initWithRootViewController:loginVC];
//    self.window.rootViewController = homeNavigationView;
    self.window.rootViewController = loginVC;
    
    return YES;
}

下面我们就围绕LoginViewController这个登录界面展开我们的讨论。我们都知道,登录的方式不同,才会导致退出的方式差异,有登录才有退出,这是因果关系。

而我们的登录方式无外乎这几种:利用 Modal 形式展示控制器 ;利用导航控制器UINavigationController跳转;当然也可以更改 UIWindow 的 rootViewController。下面我们就介绍一下这几种登录方式吧。

1、登录退出a

- (void)login
{
    HomeViewController *homeVC = [[HomeViewController alloc]init];  
    [self presentViewController:homeVC animated:YES completion:nil];

- (void)exit
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

这是利用model形式登录和退出app的。当然登录的动画形式是多选的,你可以挑选一种喜欢的方式,你也可以自定义转场动画,这是你的自由。

/**
UIModalTransitionStyleCoverVertical = 0,
UIModalTransitionStyleFlipHorizontal __TVOS_PROHIBITED,
UIModalTransitionStyleCrossDissolve,
UIModalTransitionStylePartialCurl NS_ENUM_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED,
*/

这里我做了个gif动画,是关于系统自带的,可以看下:

2、登录退出b

- (void)login

{

HomeViewController *homeVC = [[HomeViewController alloc]init];

[self.navigationController pushViewController:homeVC animated:YES];

}

- (void)exit

{

[self.navigationController popViewControllerAnimated:YES];

}

这是利用导航控制器UINavigationController跳转。也是我们在项目中经常用到的一种方式,当然,登录退出也是常用这种方式的。这里就不过多去述。

3、更改 UIWindow 的 rootViewController

- (void)login{

HomeViewController *homeVC = [[HomeViewController alloc]init];

self.window.rootViewController = homeVC;

}

这个是写在AppDelegate中的,退出时再调用该方法。

4、退出app程序(不推荐使用,这种方式会让用户觉得app闪退)

- (void)exitApplication {

UIWindow *window =  [UIApplication sharedApplication].keyWindow;

[UIView animateWithDuration:1.0f animations:^{

window.alpha = 0;

window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);

} completion:^(BOOL finished) {

exit(0);

}];

}

 警告:不要使用exit函数,调用exit会让用户感觉程序崩溃了,不会有按Home键返回时的平滑过渡和动画效果;另外,使用exit可能会丢失数据,因为调用exit并不会调用-applicationWillTerminate:方法和UIApplicationDelegate方法;

iOS 之 退出app(项目)的几种方法的更多相关文章

  1. android 安全退出应用程序的几种方法

    android 安全退出应用程序的几种方法 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.a ...

  2. iOS开发之动画编程的几种方法

    iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...

  3. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  4. Tomcat 部署项目的三种方法

    1.下载 Tomcat 服务器 ①.官网下载地址:http://tomcat.apache.org/ ②.tomcat 8.0 64位百度云下载地址:http://pan.baidu.com/s/1s ...

  5. Tomcat 部署项目的三种方法(转)

    转自:https://www.cnblogs.com/ysocean/p/6893446.html#_label0 1.下载 Tomcat 服务器 ①.官网下载地址:http://tomcat.apa ...

  6. Android Studio导入Eclipse项目的两种方法

    Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...

  7. iOS获取设备唯一标识的8种方法

    8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...

  8. iOS开发进阶-实现多线程的3种方法

    相关文章链接: 1.多线程简介 2.实现多线程的3种方法 ......待续 前言 在多线程简介中,我已经说明过了,为了提高界面的流畅度以及用户体验.我们务必要把耗时的操作放到别的线程中去执行,千万不要 ...

  9. 创建react项目的几种方法

    前言: 构建React项目的几种方式: 构建:create-react-app 快速脚手架 构建:generator-react-webpack 构建:webpack一步一步构建 1)构建:creat ...

随机推荐

  1. php php-5.6.4.tar.bz2 apache 兼容问题 child pid 27858 exit signal Segmentation fault

    环境 [root envirotar]# uname -a Linux i2..el6.x86_64 # SMP Thu Jul :: UTC x86_64 x86_64 x86_64 GNU/Lin ...

  2. Python 登录系统

    ---------------------------------------------------------------------------------------- 该程序主要实现了以下3 ...

  3. vue2.0实战

    学了几周的vue2.0,终于有时间去做一个应用了. 为了全面联系相关知识,所以用到了vue-router,以及作者最新推荐的axios,组件库用的是饿了么的mint-ui2.0. 项目构建使用官方vu ...

  4. linux(centOS)下安装Oracle步骤

    ##创建用户和组: [LanRS@localhost ~]$ su root #切换到root Password: [root@localhost LanRS]# groupadd oinstall ...

  5. C# 验证类(使用正则表达式 验证文本框)

    using System; using System.Text.RegularExpressions; namespace SG_VQCDataCollection { /// <summary ...

  6. android 移动网络实时抓包

    2G.3G环境,那就必须root进去tcpdump 方式抓. 准备: 一.root CF-auto-root: http://autoroot.chainfire.eu/ 需要清理全部数据,注意备份 ...

  7. signalR selfhost 版本兼容问题

    一.异常简要说明 最近在学习signalR,i按照http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host 这 ...

  8. DevExpress 在使用Ribbon皮肤时标题栏不变化的原因

    将 form的 AllowFormGlass 属性 该为False 就可以标题栏皮肤化了.

  9. CentOS7中安装MySQL(简便)及 网站的搭建

    一.首先,我们需要配置CentOS7中网络环境的搭建,物理机IP为192.168.100.39,虚拟机IP为192.168.100.139,网络模式设置为桥接模式 ,再进入系统挂载光盘.输入命令   ...

  10. 中间件Study-了解什么是中间件

    一.中间件含义:中间价是位于各种平台(硬件和操作系统)和各种应用之间的通用服务. 帮助应用实现高效的.可靠的消息使应用之间实现便捷的互联互通高效.可靠构建企业应用实现分布式应用的快速搭建和部署注:中间 ...