TabBarController 之前的启动画面
Posted
技术标签:
【中文标题】TabBarController 之前的启动画面【英文标题】:Splash Screen before TabBarController 【发布时间】:2011-04-01 14:12:22 【问题描述】:我是 iPhone 开发者的初学者,我正在开发我的第一个应用程序。实际上,我已经很好地创建了一个 Tab Bar 应用程序,但我想在运行应用程序时添加启动画面。
我在Loading a Welcome Screen(Splash Screen) before 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;
应用程序运行没有错误,但无法加载启动画面,任何评论都非常感谢。谢谢!
【问题讨论】:
您的 SplashScreenController 是做什么的?您是否定义了 .xib 中可见的任何内容?如果你想要一张静态图片,你可以把 id Default.png 命名为你的包,不需要其他代码。 对,在启动应用程序时将我的图像文件重命名为 Default.png 后可以看到它,但我想按住它,直到用户按下任何关闭位置。有什么建议吗?谢谢! 【参考方案1】:我的猜测是标签栏控制器忽略了您对presentModalViewController:animated:
的调用,因为它还没有出现在屏幕上。在标签栏视图作为子视图添加到窗口后,尝试将调用移动到。即使在致电makeKeyAndVisible
之后,它也可能必须发生。
【讨论】:
是的,在 makeKeyAndVisible 下移动代码后,启动画面就会出现。谢谢!【参考方案2】:如果您的要求是在用户点击它之前显示一个视图,那么 MetaLik 的建议会起作用。 或者,您可以将启动控制器的视图直接添加到应用程序窗口。
[self.window addSubview:MySplashController.view];
在任何一种情况下,您都需要创建一个按钮或 UIResponder 的某个子类来响应用户的点击,当您得到它时,根据您实例化它的方式,可以使用 dismissModalViewController 或 [self.view removeFromSuperview]。
【讨论】:
我尝试使用 splashViewController.view 但只显示主 Windows 屏幕。怎么了?谢谢! 再一次,您的 SplashViewController 做了什么 - 背景颜色是什么,框架是什么,您希望看到什么?【参考方案3】:我建议将初始屏幕视图控制器的视图添加到您的窗口并使其成为主窗口。无需使用标签栏控制器以模态方式呈现它。然后在启动画面中只有一个占据整个屏幕的按钮,每当按下它时删除并释放视图并进行正常的窗口设置(配置标签栏等)。
编辑:一些代码来说明我的意思,
在您的应用委托中:
- (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];
需要注意的一点:我假设您在笔尖中初始化并设置了标签栏控制器(从您的原始帖子中可以看出)。
【讨论】:
你有什么样品可以参考吗?因为我不知道如何制作一个 Normal UIViewController 来调用另一个 TabBarController 视图。我还是不太了解开发方法。 您基本上会在 viewController 中使用您的单例应用程序委托 [[UIApplication sharedApplication] 委托],然后像现在一样使用它的窗口添加标签栏控制器视图。没什么复杂的。您甚至可以像现在一样在您的应用程序委托中加载 tabBarController,然后只需将其视图添加到窗口中。实际上,我用一些代码来帮助添加到我的答案中。 好的,这意味着我可以在 SplashViewController 和 tabBarController 之间进行交换,就像两个视图一样。我会试一试,谢谢你的建议。【参考方案4】:Mike 对如何设置启动画面的出色评论,为了使污垢简单的启动画面创建一个名为 Default.png 的静态图像,并且 presto magico 它可以工作。它应该最多显示约 5 秒或直到您的应用程序加载。我使用了 320x480 的宽 x 高尺寸,这基本上正是我所需要的。
谢谢你,迈克。!!
此外,这里还有一个有用的链接,可以用来创建启动画面和图标等... Custom Icon and Image Creation Guidelines
【讨论】:
【参考方案5】:我这样做了,效果很好。
AppDelegate.h:
@interface AppDelegate_Pad : NSObject
<UIApplicationDelegate, SplashViewControllerDelegate>
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<SplashViewControllerDelegate> delegate;
@property (nonatomic, assign) id <SplashViewControllerDelegate> 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];
【讨论】:
以上是关于TabBarController 之前的启动画面的主要内容,如果未能解决你的问题,请参考以下文章