『iPhone』で上部ステータスを消してもタッチ範囲が残っているよ…
『iPhone』で『status bar is initially hidden』を設定すると
上部ステータスを非表示にすることが出来る。
でも、非表示にしてもタッチ範囲は残っていると見えて
その部分でタッチが出来なかったりする…。
全画面でタッチを行うアプリをやっている気が付いた…。
重ならないようにボタンを配置した場合や、
大雑把なドラッグのチェックでは
問題が無いので気が付かなかった…。
さらにドラッグで画面外まで行くと『touchesEnded』に
なるはずなのにステータスバーの所では
かなり異常な状態が発生する。
例えば…
1.ステータスバーの領域内でタッチ開始。
でも『touchesBegan』は、来ない。
2.下へドラッグして領域を出る。
『touchesBegan』が来て処理開始。
『touchesMoved』にも来る。
3.上へドラッグして領域に入る。
領域内は、『touchesMoved』が来ない。
4.領域内で手を離すと『touchesEnded』が来ない。
つまり、処理が完結しない…。
とっても困る!
じゃあ、この範囲はどうやって『disable』にすれば良いんだ?
って事になる…。
あるいは、表示したままにするか…。
取り敢えず以下のフラグを設定し
半透明にすると処理上破綻しないのを確認した。
>[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
もしくは、『plist』に以下の設定を行う。
『Status bar style : transparent black style(alph of 0.5)』
…
あれ?
この設定ってアプリケーション終了しても戻らない?
自前でデフォルトに戻す必要があるっぽい…。(笑)
…
色々調べていくうちに
『status bar is initially hidden』と
>[UIApplication sharedApplication].statusBarHidden = YES;
は、同じではない事に気が付いた。
と言うのは、フラグの変更だけでは、以下の関数で得られる
ステータスバーの範囲指定が更新されないのだ。
>CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
多分こっちを使う方が良いのではないかと思う。
>[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
出し入れする訳では無いのなら
『status bar is initially hidden』を使うのが吉だと思われる。
…
色々調べていくうちに
アプローチが間違えているんじゃないかと思い始めた…。
タッチスクリーンのタッチ範囲は、
1.320x480ドットの全体範囲。
2.全体範囲より優先順位の高い
320x20ドットのステータス範囲。
と考えていたのだが…
新たにもう一つの考え方が思い付いた。
1.320x20ドットのステータス範囲。
2.320x460ドットの全体範囲。
※ドラッグでステータスと全体のつなぎの部分で
特殊処理を行っている。
…
となるとステータスをいくらいじっても解決しない訳だ…。
と思っていたら、海外でも問題になっていた…。
『iphone status bar hidden touch』をキーワードにすると
「上手くいかないんですが…」的な質問をしている。
そこにあるコメントをみるとみんな引っかかっているのが分かる。
で、色々眺めていくと…
「実機では、正常に動くのでシミュレーターのバグ」と
結論付けている。
…
すみません…
実機無いんで…
確認できなかったりして…。(汗)
実機が、来たから確認してみよう…。
| 固定リンク
コメント