更改状态栏alpha

时间:2017-03-16 22:36:11

标签: ios statusbar

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

这是正常的状态栏 This is the normal status bar

这是拖动表格视图时发生的情况 enter image description here

状态栏alpha如何更改?框架是如何改变的?最初我认为这是一个快照,但时钟会像往常一样发生变化。

2 个答案:

答案 0 :(得分:14)

这应该是淡入淡出动画的技巧:

/* 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并按照你想要的方式移动它。玩得开心;]

答案 1 :(得分:0)

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

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

另外,我建议使用CAAnimations并避免真正改变任何东西。只需使用动画即可获得该外观。