iPhone シミュレータがスローモーションになってしまう原因
SPECIAL
iOS シミュレーターが常にスローモーションモードになってしまう
Xcode 4.3.2 にアップデートしたのをきっかけに、これまでは Mac OS X 10.6 へのリモート接続を可能にする で記したように Windows からリモートで開発していたのを、Mac を直接操作して開発するようにしてみました。
そして、iOS シミュレーターでのデバッグを始めたときに、画面がもっさりとスローモーションで動くことに気が付きました。
原因は Microsoft キーボード
最初は、Xcode 4.3.2 にアップデートした影響で、自分の書いたプログラムか、または iOS シミュレーターが誤動作を起こしているのかもと思ったのですけど、その原因は Mac に繋いだ Microsoft Natural Ergonomic Desktop 7000 というキーボードとマウスのセット製品だった様子です。
iOS シミュレーターには、Shift キーを 3 回押すと、"スローアニメーションモード" と "通常モード" とが切り替わるようになっています。
それが、どうやら Microsoft Natural Ergonomic Desktop 7000 が接続されている状態だと、iOS シミュレーターにフォーカスがあたった頃合で "スローアニメーションモード" と "通常モード" との切り替えが発生してしまう感じでした。
ちなみに、Xcode でのデバッグ中にスローアニメーションモードの切り替えが発生すると "Simulator slow-motion animation are now on" と表示されるのでよくわかります。
iOS シミュレーターへフォーカスが移るときなので、他のウィンドウから iOS シミュレーターをクリックしたときもそうですけど、デバッグが始まって Xcode から iOS シミュレーターに移ったときにも起こります。
他にも iOS シミュレーターのシステムメニューで "デバッグ" から "スローアニメーションを切り替える" を選択したときにも、選んだときにいったんスローアニメーションモードが切り替わった後で、フォーカスがシステムメニューからシミュレータの画面に戻ったときに再び切り替わる、つまりスローアニメーションの状態が変わらないのが厄介です。
ただ、フォーカスが移るときであっても、iOS シミュレーターの外枠の黒部分をクリックした時に限っては、スローアニメーションモードの切り替えは行われない感じでした。
このような現象は、Mac OS X 10.6 から Windows リモートデスクトップに接続する で記したように Remote Desktop Connection Client で Windows XP へリモート接続したときにも、Shift が連続で押されたというメッセージが表示されたところからも、iOS シミュレータに限らず、発生している様子です。
試しに Microsoft Natural Ergonomic Desktop 7000 を外して、一般的な USB マウスとキーボードを使った時には、フォーカス移動時の予期しないスローアニメーションモードの切り替えは起こらなかったので、まず間違いなく Microsoft Natural Ergonomic Desktop 7000 の問題でしょう。
ちなみに、一般的なマウスで操作していても、USB ポートのどこかに Microsoft Natural Ergonomic Desktop 7000 が接続されていると、同じ誤動作が発生するので、キーボードドライバの Microsoft IntelliType か、マウスドライバの Microsoft IntelliPoint のどちらかの制御ミスに依るところと思われます。
解決への糸口
Microsoft IntelliType や Microsoft IntelliPoint は、アプリケーションごとに動作を細かく調整する機能が用意されているのですけど、機能を全て無効化してみたりしても、改善される様子はありませんでした。
ちなみに Xcode 4.3.2 では iOS シミュレーターが Xcode プログラム内部に格納されているので、シミュレータ固有の調整をしたい場合には、アプリケーションフォルダの "Xcode" のパッケージの内容を表示して、その中の "Developer" → "Platforms" → "iPhoneSimulator.platform" → "Developer" → "Applications" フォルダのショートカットをいったんデスクトップなどに出してから、それを辿って "iOS シミュレータ" を IntelliType などへ登録できます。
ともあれそんな感じで、根本解決を求めるなら IntelliType や IntelliPoint での改善待ちか、iOS シミュレータの仕様変更を待つしか方法がなさそうです。
ただ、1 年が経っても改善される様子がみられなかったので、別の回避方法はないか探していたら、キーリマッパーを使って回避する方法を見つけました。
その回避方法は iPhone シミュレーターが勝手にスローモーションになるのを防ぐ に記しましたので、気になる方はぜひそちらをご覧ください。