UIWindow#windowLevelについて(ステータスバーの上にボタンを置く)

UIWindowは、Viewツリーの頂点にいて最初にアプリケーション側が1個作るので、
自分で作るということはめったにないのだが、この中のプロパティwindowLevelが気になったので
ちょっと調べてみた。

windowLevelはUIWindowLevel型のプロパティである。
UIWindowLevelの中身はCGFloatだった。

もともと定義してある
UIWindowLevelNormal, UIWindowLevelStatusBar, UIWindowLevelAlertは見てみると
0.0, 1000.0, 2000.0 だった。

てことはもしかして
数字がでかいほど前に表示されるんじゃね?と思い、
例えばwindowLevelを1000〜にすると
ステータスバーの前に色々好きなもの置けるのではないかと思ったわけです。

で、やってみた

window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    window.windowLevel = 1001.0f;
    window.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn setTitle:@"hoge" forState:UIControlStateNormal];
    [btn sizeToFit];
    
    [window addSubview:btn];
    [window makeKeyAndVisible];

でけた。

そら案内の注意報ボタンとかバッテリーマークのところに出てくるけど、
こんなかんじでやってるのかなあと思いました。