我在舞台上有2个子视图(启动画面和主屏幕),一旦启动画面播放完它的音频,它就会调用一个名为-(void)audioComplete
的函数,该函数可以淡出启动画面,显示主屏幕。我似乎无法做到这一点。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window addSubview:splashController.view];
[self.window addSubview:rootController.view];
[self.window makeKeyAndVisible];
return YES;
}
-(void)audioComplete{
NSLog(@"REMOVE FROM STAGE");
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:splashController.view];
splashController.view.alpha = 0.0;
[UIView commitAnimations];
[splashController release];
}
如果我在NSLog(@"%@",[splashController.view superview]);
函数中添加audioComplete
,我会(null)
,但不是在我将其添加到didFinishLaunchingWithOptions
函数时。
答案 0 :(得分:1)
Apple高度recommends against using splash screens。相反,您应该在根目录中使用名为“Default.png”的图像。这将在应用程序启动时显示,并使您的应用程序看起来比实际更快。如果您创建自己的加载屏幕,Apple可能会拒绝您向应用商店提交的内容。
答案 1 :(得分:1)
可能是以下两件事之一:
1)好像你的rootControllerView正在splashControllerView上添加。
也许你的动画正在发生,但你无法看到它,因为你的rootControllerView正在阻止它。
尝试撤消addSubview的订单。
2)不要使用与动画相同的方法释放启动视图。在释放视图之前等待动画完成。您可以通过以下方式执行此操作:
-(void)audioComplete
{
NSLog(@"REMOVE FROM STAGE");
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidFinishSelector:@selector(releaseView)];
splashController.view.alpha = 0.0;
[UIView commitAnimations];
}
-(void)releaseView
{
[splashController release];
}
此外,作为内存管理的最佳实践,请不要直接发布splashControllerView。
我所做的是在将视图添加为子视图后立即发布视图(添加子视图会增加它的保留计数)。
当我完成子视图时,我只需调用[subView removeFromSuperView],这会减少保留计数并使其为零。
简单地说:
UIView *view = [[UIView alloc] init]; //retain count = 1
[self.view addSubview:view]; //retain count = 2
[view release]; //retain count = 1
//do stuff with the view
[view removeFromSuperview]; //retain count = 0;
答案 2 :(得分:0)
我真的没有看到你的问题,因为在你的didFinishLaunchingWithOptions
中你添加了你的观点,那里的非常!因此,每次拨打NSLog(@"%@",[splashController.view superview]);
时,您都会收到一个答案,但在audioComplete
中您释放了子视图并且它已经离开...之后您将无法访问超级视图,因为 - 您是子视图被释放......
我会用这个:
-(void)audioComplete{
NSLog(@"REMOVE FROM STAGE");
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:splashController.view];
splashController.view.alpha = 0.0;
[UIView commitAnimations];
[splashController.view removeFromSuperview];
}
你会再次得到同样的东西,但如果你以后需要的话,你的subView仍然存在。
答案 3 :(得分:0)
用于淡入和淡出飞溅和主屏幕之间的图像。我建议你可以尝试在rootviewcontroller中有两个图像。在两个UIIMageViews之间制作了淡入和淡出动画......
淡入读出这个样本tuts:
http://iosdevelopertips.com/user-interface/fade-transition-fade-images-in-and-out.html
在动画期间,你可以完成你的音频流