【问题标题】:Change status bar alpha更改状态栏 alpha
【发布时间】:2017-03-16 22:36:10
【问题描述】:

在 Snapchat 应用中,当向下拖动表格视图以重新加载时,状态栏会更改 alpha。

这是正常的状态栏

这是当表格视图被向下拖动时发生的情况

状态栏 alpha 是如何变化的?框架是如何改变的?本来以为是快照,结果时钟按正常变化了。

【问题讨论】:

    标签: ios statusbar


    【解决方案1】:

    这应该可以实现淡入淡出动画:

    /* Swift 3 */
    
    let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow
    UIView.animate(withDuration: 2) {
        statusBarWindow?.alpha = 0.2
    }
    
    /* Objective-C */
    
    UIWindow *statusBarWindow = (UIWindow *)[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"];
    [UIView animateWithDuration:2.f 
                     animations:^{ [statusBarWindow setAlpha:0.2]; } 
                     completion:nil];
    

    您还可以设置 statusBarWindow 的frame 并根据需要移动它。玩得开心;]

    【讨论】:

    • 你确定这会通过应用商店的审核吗?你有证据吗?
    • 嗨@lufritz!如果您担心私钥,您可以尝试制作 2 个子字符串并加入它们。做了一次并通过了审查,之前被一个字符串拒绝了。没有人会手动检查您的代码,分析器也不会检查所有可能的组合。该项目处于保密协议下,因此无法向您展示。附言当没有其他方法并且客户希望尽快完成某些事情时,我只使用了几次私有类/密钥。在生产环境中做这样的事情是不安全的。
    • 这太棒了!不知道你能做到这一点。我认为这没有理由不通过应用审核。
    【解决方案2】:

    他们很可能要么抓住状态栏所在的窗口并为其设置动画,要么他们在状态栏上方放置一个带有视图的窗口并为其设置动画。我没有要检查的应用程序,但它必须是这两种方法中的任何一种。要在状态栏上方放置一个窗口,我认为它是 window.windowLevel = UIWindowLevelStatusBar + 1 以便它位于您的状态栏上方。如果他们正在获取引用,您必须遍历应用程序窗口才能找到它,我从未尝试找到状态栏窗口,但我已经抓住了键盘窗口。如果时钟确实被拉下,那么它可能是获取状态栏所在的窗口和在上方添加一个窗口并为两者设置动画的组合。 Facebook 抓住键盘窗口在 Facebook Messenger 中向上滚动。希望对您有所帮助。

    编辑: 我找到了获取状态栏窗口here 的示例。

    另外我建议使用 CAAnimations 并避免真正改变任何东西。只需使用动画来呈现这种外观。

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2016-10-25
      相关资源
      最近更新 更多