今更の話題でたいへん恐縮です。
iOS7になってUIの雰囲気がだいぶ変わり、UISwitchもかなり変わりました。
青い部分が緑色になり、「オン」「オフ」という表記がなくなってスイッチの移動距離が短くなりました。アニメーション的にもちょっとリッチな感じになりました。
これだけで済めば良かったのですが、プログラムコードから見た時の挙動も変わっており、最近になってようやく気がついたので調べてみました。
今回のプログラムでは、何故か TouchUpInside でイベントを拾っていたために差異が大きく出てしまいました。最初から ValueChanged を使っていれば良かったのですが。。。
iOS6のUISwitchは以下のような感じです。
uiswitch_ios6.png
中央の丸い部品(ノブ?)をオフからオンへ移動させ、端にくっついた状態で指を離すと TouchUpInside と ValueChanged の両方が走ります。UISwitch から離れた場所でも TouchUpInside が呼ばれるのですが、厳密にいうと正しくない動作のような気もします。
iOS7のUISwitchは以下のような感じです。
uiswitch_ios7.png
中央の丸い部品を指で押して動かし始めると、円の幅が広くなります。そのまま端まで動かすと幅広の円が真円に変わり、このときにValueChangedのイベントが走ります。指を離さなくてもValueChangedが走るという点でiOS6とはかなり変わっています。
ちなみに指をもっと動かしてUISwitchから離れた場所で指を離すと、TouchUpInsideは呼び出されませんでした。(名前の通りの動作)
今回のプログラムでは TouchUpInside を使っていたため、iOS7以降の端末でUISwitchを指でスライドさせて動かすと反応しないという状況になっていることが分かりましたので、ValueChangedに変更し、とりあえず動作するようになりました。
iOS6とiOS7ではUISwitchでValueChangedイベントが発生するタイミングが以下のように異なることが分かりました。
iOS6:ノブを反対側の端につけた状態で指を離す
  (指を離さないとイベントが起きない)
iOS7:ノブが反対側に到達し、さらに押し込む(幅広の円が真円に変わる)
  (指を離さなくてもイベントが起きる)
UISwitchを使っているアプリの挙動の再確認が必要かもしれません。
2015.03.04追記
iOS7以降では、iOS6以前と比べてUISwitch自体をタップしたときの動作も若干変わっているようです。
iOS6ではタップするとそのまま内部の部品がスライドしていましたが、iOS7以降ではタッチしたとき丸い部品の幅が広がり、タッチに対する反応が見えるようになっています。その状態で指を離すと切り替え動作が実行されるようです。
また、UISwitchが緑色になりオンの表示なのにイベントが走っていないという報告があり、検証してみたところごくまれに発生しうることがわかりました。
UISwitchをタッチしたまま(内部の丸い部品の幅が広くなっている状態のまま)タスク切り替えの挙動に入るとイベントが発生しないことがわかりました。UISwitchを押した状態のまま追加で指3本で画面をタッチして4本指の状態にし、横方向にスライドするとタスク切り替えの状態に入ってしまい、表示は変わっているのにイベントが発生しませんでした。
なおiOS6ではタスク切り替えの動作に入った瞬間にUISwitchの表示状態が元に戻るので、イベントが発生しなくても問題はないようです。
これは超レアケースなので無視してもほとんど問題無いとは思いますが。。。


0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください