禁止在iOS中的启动视图上旋转

时间:2011-05-12 05:38:37

标签: ios rotation splash-screen

我有一个启动画面我将alpha从100淡化到0.我想要当一个alpha为0时,我应该只返回YESAutorotateToInterfaceOrientation返回YES。我无法使这段代码起作用:

if ( splashView.alpha == 0 )
{
    return YES;
} else {
    return NO;
}

相反,splashView.alpha始终返回null。有什么想法吗?

4 个答案:

答案 0 :(得分:3)

当您将alpha设置为零时,向该视图询问其alpha值将返回零。即使动画没有完成(Core Animation中的modelLayer和presentationLayer之间的区别,如果你想了解发生了什么)。

为了得到你想要的东西应该有用;

- (BOOL)shouldAutorotateToInterfaceOrientation:(...) {
  BOOL shouldAutoratate = NO;
  if(self.splashViewFaded) {
    shouldAutorotate = YES;
  }
  return shouldAutorotate;
}

然后在你的appDidFinishLaunching方法中(或任何有意义的地方)做这样的事情;

self.viewController.splashViewFaded = NO;
[UIView animateWithDuration:0.25 // or whatever
                      delay:0.0 // or whatever
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^() {
                                self.splashView.alpha = 0.0;
                            }
                 completion:^() {
                                self.viewController.splashViewFaded = YES;
                                [self.splashView removeFromSuperview];
                 }];
明智的话,我从记忆中输入了这个,所以它可能无法编译,如果你复制并粘贴,请阅读文档。

答案 1 :(得分:2)

在动画期间,alpha属性返回的值不一定与视图的瞬时alpha匹配。此外,一旦alpha达到0,就无法保证系统会重新检查shouldAutorotateToInterfaceOrientation:的结果,因此您的界面可能会被卷入纵向,直到设备被转动为止。

首先,考虑这是否真的是最好的计划。如果用户将设备保持在横向或倒置状态,那么就他们如何看待它而言,向侧面或倒置显示闪屏是否真的是最好的体验。虽然如果你的“闪屏”与Default.png匹配,我可以在iPhone上看到它,因为它也总是以纵向模式显示。

但是如果必须的话,更好的计划是让你的willAnimateRotationToInterfaceOrientation:duration:方法将反向旋转应用到初始屏幕视图,以保持闪屏“直立”,无论其余部分的方向如何该应用程序。有关详细信息,请参阅Keeping controls in landscape mode but allowing uitabbar to switch

答案 2 :(得分:1)

alpha值应介于1.0和0.0之间,所以我猜这可能是你的问题。

答案 3 :(得分:1)

你应该只使用块动画:

[UIView animateWithDuration:2.0 
                 animations:^{
                     splashView.alpha = 0.0;
                 }
                 completion:^(BOOL finished){
                     return YES;
                 }];

这将运行动画块,一旦完成,为您的方法返回YES。