iOS 之 退出app(项目)的几种方法
路漫漫其修远兮,吾将上下而求索。也算是对程序员的一种真实写照了吧。
今天想研究一下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(项目)的几种方法的更多相关文章
- android 安全退出应用程序的几种方法
android 安全退出应用程序的几种方法 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.a ...
- iOS开发之动画编程的几种方法
iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...
- IOS开发中数据持久化的几种方法--NSUserDefaults
IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...
- Tomcat 部署项目的三种方法
1.下载 Tomcat 服务器 ①.官网下载地址:http://tomcat.apache.org/ ②.tomcat 8.0 64位百度云下载地址:http://pan.baidu.com/s/1s ...
- Tomcat 部署项目的三种方法(转)
转自:https://www.cnblogs.com/ysocean/p/6893446.html#_label0 1.下载 Tomcat 服务器 ①.官网下载地址:http://tomcat.apa ...
- Android Studio导入Eclipse项目的两种方法
Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
- iOS开发进阶-实现多线程的3种方法
相关文章链接: 1.多线程简介 2.实现多线程的3种方法 ......待续 前言 在多线程简介中,我已经说明过了,为了提高界面的流畅度以及用户体验.我们务必要把耗时的操作放到别的线程中去执行,千万不要 ...
- 创建react项目的几种方法
前言: 构建React项目的几种方式: 构建:create-react-app 快速脚手架 构建:generator-react-webpack 构建:webpack一步一步构建 1)构建:creat ...
随机推荐
- 现代软件工程作业 第二章 学习github笔记
在网上大量资料的辅助下,学习了github的基本使用方法,尝试了一些常见的命令.为了便于记忆总结了自己的学习内容. 1.首先需要在github的官网上注册一个帐号,并新建一个repository,选这 ...
- 无意之间发现的Servlet3.0新特性@WebServlet
今天无意之间看到了一个注解,这个注解就是@WebServlet,@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Se ...
- jvm--2.类加载机制
3.JVM类加载机制 (1)类加载机制 虚拟机把描述类的数据从Class文件,用ClassLoader ,加载到内存,并对数据进行校验.转换解析和初始化,最终形成虚拟机直接使用的java类型, 这就是 ...
- vs2015全新nuget使用全析
随着vs2015正式版本的发布,实在按捺不住,安装体验了一把,感触最大的除了可以调试lamda以外莫过于对nuget的升级. 先来一张全景: 怎么样,风格完全不同了吧.可以显示预发行版本了,右上角那个 ...
- 卷积神经网络_(4)_caffe简介
这里大致说一下caffe.caffe是伯里克利大学的贾杨清教授写的一个深度学习框架,使用C++编写的,但同时也提供python和matlab接口:组成部分主要有: (1)Blob:用来存储数据和梯度: ...
- day6
开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...
- Oracle基础知识(一)、简介与安装
文章提纲 Oracle简介与发展历程 安装实例(面向普通开发者) 一.Oracle简介与发展历程 中文名称甲骨文公司,全称为甲骨文股份有限公司(甲骨文软件系统有限公司).甲骨文已超越 IBM ,成为继 ...
- lanmp之一 (动静分离)
一.lanmp--需求篇 1. 准备两台centos 6,其中一台机器跑mysql,另外一台机器跑apache,nginx + php 2. 同时安装apache和nginx,其中nginx启动80端 ...
- windows内网渗透技巧
1.(windows)无扫描器情况下内网存活主机探测: for /l %i in (1,1,255) do @ping 192.168.1.%i -w 1 -n 1 | find /i "t ...
- Eclipse启动Tomcat时发生java.lang.IllegalArgumentException: <session-config> element is limited to 1 occurrence
在学习struts 2时,为了方便,直接从下载的struts的apps目录下的struts2-blank.war压缩包下的WEB-INF\复制的web.xml,当我启动Tomcat时,发生 java. ...