路漫漫其修遠(yuǎn)兮,吾將上下而求索。也算是對(duì)程序員的一種真實(shí)寫照了吧。
今天想研究一下iOS中退出項(xiàng)目的方法,說是今天,其實(shí)也關(guān)注并去了解很久了。只是始終找不到自己認(rèn)為很好的方法。今天就先把自己了解的列舉一下,以后如果還能找到認(rèn)為更好的,就在補(bǔ)充吧。
這里是我們?cè)陧?xiàng)目的AppDelegate中普遍寫到的一句代碼(至于擴(kuò)展和豐富,我們暫不去深究):
- (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這個(gè)登錄界面展開我們的討論。我們都知道,登錄的方式不同,才會(huì)導(dǎo)致退出的方式差異,有登錄才有退出,這是因果關(guān)系。
而我們的登錄方式無外乎這幾種:利用 Modal 形式展示控制器 ;利用導(dǎo)航控制器UINavigationController跳轉(zhuǎn);當(dāng)然也可以更改?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的。當(dāng)然登錄的動(dòng)畫形式是多選的,你可以挑選一種喜歡的方式,你也可以自定義轉(zhuǎn)場(chǎng)動(dòng)畫,這是你的自由。
/** UIModalTransitionStyleCoverVertical = 0,
UIModalTransitionStyleFlipHorizontal __TVOS_PROHIBITED,
UIModalTransitionStyleCrossDissolve,
UIModalTransitionStylePartialCurl NS_ENUM_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED, */
這里我做了個(gè)gif動(dòng)畫,是關(guān)于系統(tǒng)自帶的,可以看下:

2、登錄退出b
- (void)login{
HomeViewController?*homeVC = [[HomeViewController?alloc]init];
[self.navigationController?pushViewController:homeVC?animated:YES];
}
- (void)exit{
[self.navigationController?popViewControllerAnimated:YES];
}
這是利用導(dǎo)航控制器UINavigationController跳轉(zhuǎn)。也是我們?cè)陧?xiàng)目中經(jīng)常用到的一種方式,當(dāng)然,登錄退出也是常用這種方式的。這里就不過多去述。
3、更改?UIWindow 的 rootViewController
- (void)login{
HomeViewController?*homeVC = [[HomeViewController?alloc]init];
self.window.rootViewController = homeVC;
}
這個(gè)是寫在AppDelegate中的,退出時(shí)再調(diào)用該方法。
4、退出app程序(不推薦使用,這種方式會(huì)讓用戶覺得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函數(shù),調(diào)用exit會(huì)讓用戶感覺程序崩潰了,不會(huì)有按Home鍵返回時(shí)的平滑過渡和動(dòng)畫效果;另外,使用exit可能會(huì)丟失數(shù)據(jù),因?yàn)檎{(diào)用exit并不會(huì)調(diào)用-applicationWillTerminate:方法和UIApplicationDelegate方法;