更改状态栏 alpha

Change status bar alpha

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

这是正常的状态栏

这是 table 视图被向下拖动时发生的情况

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

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

编辑: 我找到了一个获取状态栏的例子 window here

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

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

/* 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 并根据需要移动它。玩得开心;]