これを機能させるのに多くの問題があり、最終的にあきらめてジャンドレアのアドバイスに従いました。彼は、UIWindow をサブクラス化し、そこに motionEnded を実装することを提案しました。これは彼の投稿からの引用です。かなり下を探してください。
まず、UIWindow をサブクラス化しました。これは簡単です。MotionWindow : UIWindow などのインターフェイスを使用して、新しいクラス ファイルを作成します (独自のものを自由に選択してください)。次のようにメソッドを追加します。
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeviceShaken" object:self];
}
}
@"DeviceShaken" を任意の通知名に変更します。ファイルを保存します。
ここで、MainWindow.xib (在庫の Xcode テンプレートのもの) を使用する場合は、そこに移動して、Window オブジェクトのクラスを UIWindow から MotionWindow または任意の名前に変更します。xib を保存します。プログラムで UIWindow を設定する場合は、代わりに新しい Window クラスを使用してください。
これで、アプリは特殊な UIWindow クラスを使用しています。揺れについて知りたい場所はどこでも、通知にサインアップしてください! このような:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceShaken) name:@"DeviceShaken" object:nil];
自分自身をオブザーバーとして削除するには:
[[NSNotificationCenter defaultCenter] removeObserver:self];