【问题标题】:Disallow rotating on splash view in iOS禁止在 iOS 中的启动画面上旋转
【发布时间】:2011-05-15 10:52:09
【问题描述】:

我有一个闪屏,我将 alpha 从 100 淡化为 0。我希望 shouldAutorotateToInterfaceOrientation 仅在 alpha 为 0 时返回 YES。我无法让此代码工作:

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

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

【问题讨论】:

    标签: ios rotation splash-screen


    【解决方案1】:

    当您将 alpha 设置为零时,转身并询问视图的 alpha 将返回零。即使动画还没有完成(如果你想了解发生了什么,核心动画中的 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];
                     }];
    

    聪明人的话,我是从记忆中输入的,所以它可能无法编译,如果你复制并粘贴,请阅读文档。

    【讨论】:

    • 这是我需要的解决方案。我从 NSLog 了解到,问题一直是动画可能需要 X 秒才能运行,但这只是视觉上的。如果您立即检查 alpha,它将已经设置为零,因为动画本身本质上只是您创建的动作。这个带有完成的回调方法完成了工作。
    • 如果您打算这样做,则不需要splashViewFaded 变量。只需测试splashView.superview 是否为零。
    【解决方案2】:

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

    首先,考虑这是否真的是最好的计划。如果用户以横向或倒置的方式拿着设备,那么就他们的观看方式而言,横向或倒置显示启动屏幕真的是最好的体验吗?虽然如果您的“启动画面”与 Default.png 匹配,我可以在 iPhone 上看到它,因为它也始终以纵向模式显示。

    但如果您必须这样做,更好的计划是让您的 willAnimateRotationToInterfaceOrientation:duration: 方法对初始屏幕视图应用反向旋转,以保持初始屏幕“直立”,无论应用程序其余部分的方向如何.详情请见Keeping controls in landscape mode but allowing uitabbar to switch

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这有助于过渡,但并没有阻止飞溅被旋转。我错过了一步吗?
      【解决方案4】:

      你应该只使用块动画:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多