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

今天想研究一下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. Matlab与Windows桌面提醒

    最近在实验室用Matlab做实验,一次训练下来最少得也得5到10分钟吧.在Matlab运行的过程中,又不太好去做别的事情,因为5到10分钟的时间实在有点短.但是,眼睁睁看着代码的运行的话,5分钟又实在 ...

  2. html 杂记

    <link rel="******"  href=“****.css” type=“text/css”  media=“screen” />css样式外部链接 加个斜杠 ...

  3. Autoit3 获取WinForm下的ToolTip

    相比Autohotkey,在我看来,Autoit最实用的就是对于WinForm Application的良好支持 然而,要想将鼠标放在WinForm的ToolTip上,简直无异于自己把自己举起来,故而 ...

  4. ubuntu14.04下搭建python+mysql环境

    简略记录ubuntu14.04下搭建python操作的mysql服务器的过程和其中遇到的问题及解决方法. 第一部分: 安装mysql 安装步骤:1. sudo apt-get install mysq ...

  5. Yii rbac原理和实践

    Yii框架中集成分层的 RBAC,代码位于vendor\yiisoft\yii2\rbac中,rbac工作原理分为两部分,建立授权数据和进行权限检查. 如上,一个角色拥有某个权限,如果希望用户拥有这个 ...

  6. websocket业务代码

    需求 用户登陆后,服务器实时推送用户的订单提醒,用websocket处理. 方案 两个js,notify-socket.js处理socket的连接,和socket的处理. nofify.js,做右下角 ...

  7. ACM/ICPC 之 DFS+SPFA-贪心+最短路(POJ2679)

    //POJ2679 //DFS+SPFA+邻接表 //只能走每个点费用最小的边,相同则需保证距离最短 //求最小费用及最短距离 //Time:47Ms Memory:900K #include< ...

  8. flask_sqlalchemy 乱码问题

    简言之, /etc/my.conf default_character_set=utf8 配置成了 default_character_set=utf-8 继而 sqlalchemy 创建表使用的字符 ...

  9. PHP修改表格(增删改)

    要求: 1.熟练shi用  post 和  get  传值        2. php嵌套在HTML中        3.熟练:if 语句(其他语句)的使用 --------------------- ...

  10. 多功能前台交互效果插件superSlide

    平时我们常用的"焦点图/幻灯片""Tab标签切换""图片滚动""无缝滚动"等效果要加载n个插件,又害怕代码冲突又怕不兼容 ...