TabBarController之前的启动画面

我是iPhone开发人员的初学者,我正在开发我的第一个应用程序。 实际上,我已经创建了一个Tab Bar应用程序,但我想在运行应用程序时添加Splash Screen。

我在TabBarController之前加载欢迎屏幕(启动画面)时发现了一个确切的问题

但是当我尝试输入我的代码时,启动画面不会加载,只是继续显示我的tabbarcontroller。

我创建了一个SplashViewController.h,SplashViewController.m和SplashView.xib,以下是我的代码,

#import "SplashViewController.h" ... ... - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. SplashViewController *controller = [[SplashViewController alloc] initWithNibName:@"SplashView" bundle:nil]; [self.tabBarController presentModalViewController:controller animated:YES]; [controller release]; // Add the tab bar controller's view to the window and display. [self.window addSubview:tabBarController.view]; [self.window makeKeyAndVisible]; return YES; } 

应用程序运行没有错误,但只是无法加载启动屏幕,任何评论都非常感谢。 谢谢!

我的猜测是标签栏控制器忽略了你对presentModalViewController:animated:的调用presentModalViewController:animated:因为它还没有出现在屏幕上。 将标签栏视图添加为窗口的子视图后,尝试将呼叫移至。 即使在调用makeKeyAndVisible之后,它也可能必须发生。

如果您的要求是在用户点击它之前显示视图,那么MetaLik的建议将起作用。 或者,您可以将启动控制器的视图直接添加到应用程序窗口。

  [self.window addSubview:MySplashController.view]; 

在任何一种情况下,你都需要创建一个按钮或UIResponder的某个子类来响应用户的点击,当你得到它时,要么dismissModalViewController或[self.view removeFromSuperview],这取决于你如何实例化它。

我建议只需将启动画面视图控制器的视图添加到窗口并使其成为主窗口。 无需使用标签栏控制器以模态方式呈现它。 然后在启动画面中只有一个占据整个屏幕的按钮,每当按下它并移除并释放视图并进行正常的窗口设置(配置标签栏等)。

编辑:一些代码来显示我的意思,

在您的应用代理中:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { SplashViewController *controller = [[SplashViewController alloc] initWithNibName:@"SplashView" bundle:nil]; [self.window addSubview:controller.view]; [self.window makeKeyAndVisible]; [controller release]; } 

在启动视图控制器中:

 -(IBAction) didPressButtonToDismiss:(id)sender { //create a reference to the singleton class for easier typing MyAppDelegate *delegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate]; [delegate.window addSubview:delegate.tabBarController.view]; [delegate.window bringSubviewToFront:delegate.tabBarController.view]; [self.view removeFromSuperview]; } 

有一点需要注意:我假设你初始化并在笔尖中设置标签栏控制器(就像你原来的post一样)。

Mike对如何设置启动画面的优秀评论,为了使污垢简单的启动画面创建一个名为Default.png和presto magico的静态图像。 它应显示最多约5秒或直到您的应用程序加载。 我使用宽度x高度尺寸320×480,它基本上是我需要的。

谢谢Mike。!!

此外,这是一个有用的链接,同时创建一个启动画面和图标等… 自定义图标和图像创建指南

我这样做了,它工作正常。

AppDelegate.h:

 @interface AppDelegate_Pad : NSObject  { UIWindow *window; UITabBarController *tabBarController; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; @end 

AppDelegate.m:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [window addSubview:tabBarController.view]; [window makeKeyAndVisible]; SplashViewController *svc = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil]; svc.delegate = self; [self.tabBarController presentModalViewController:svc animated:NO]; return YES; } -(void)splashViewControllerDidFinish:(SplashViewController *)splashViewController { [self.tabBarController dismissModalViewControllerAnimated:NO]; } 

SplashViewController.h:

 @protocol SplashViewControllerDelegate; @interface SplashViewController : UIViewController { id delegate; } @property (nonatomic, assign) id  delegate; @end @protocol SplashViewControllerDelegate -(void)splashViewControllerDidFinish:(SplashViewController *)splashViewController; @end 

SplashViewController.m:

 // Call the below line where you want to remove splash view [self.delegate splashViewControllerDidFinish:self];