0

3.0 でのシェイクの実装に関するいくつかの投稿を読んだ後、私はその考えを理解したと思いますが、次の呼び出しがありません。

モーション開始モーション終了モーションキャンセル

これは私が読んだことの例です: iPhoneの揺れを検出してプログラムする方法

追加したのは確か

[self becomeFirstResponder];

そしてその

-(BOOL)canBecomeFirstResponder {
NSLog(@"First responder");
return YES;
}

これらのイベントに対して特別なデリゲートを有効にする必要がありますか?

これらのイベントはシステムによって制御されており、最初の応答者に渡されて続行されることを理解しています...

何か案が ?

ありがとう、

r.

4

2 に答える 2

1

これを機能させるのに多くの問題があり、最終的にあきらめてジャンドレアのアドバイスに従いました。彼は、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];
于 2010-02-12T17:38:31.790 に答える
0

どこに電話しますbecomeFirstResponderか? で行う必要がありますviewDidAppear。これは解雇されますか?

于 2010-02-12T17:08:28.550 に答える