2

アニメーションを開始する揺れを検出し、アニメーションが終了するとアニメーションを停止します。動作する場合もありますが、シェイクが終了したことに気付かない場合もあるため、motionEndedメソッドを呼び出すことはありません。他の誰かがこの問題を抱えていましたか?ソリューション?

-(BOOL)canBecomeFirstResponder {
return YES;
}

-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:NO];
[self becomeFirstResponder];
}

-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:NO];
}

-(void)viewDidDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewDidDisappear:NO];
}

-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.type == UIEventSubtypeMotionShake )
{
    NSLog(@"1");
    [img startAnimating];
}
}

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.type == UIEventSubtypeMotionShake )
{
    NSLog(@"3");
    [img stopAnimating];
}
}
4

1 に答える 1

0

Apple は、ここで発生している「矛盾」について話し合っているようです: http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html

リスト 4-2 の下には、次のように書かれています。

... ただし、タッチ イベントとシェイク モーション イベントには重要な違いが 1 つあります。ユーザーがデバイスを振り始めると、システムはmotionBegan:withEvent:メッセージでモーションイベントをファーストレスポンダーに送信します。ファーストレスポンダがイベントを処理しない場合、イベントはレスポンダ チェーンを上っていきます。揺れが 1 秒ほど続くと、システムは motionEnded:withEvent: メッセージをファーストレスポンダに送信します。しかし、揺れが長く続く場合、またはモーションが揺れではないとシステムが判断した場合、ファーストレスポンダは motionCancelled:withEvent: メッセージを受け取ります。

motionCancelled:withEvent コールバックを追加して、motionEnded 呼び出しを受け取らない場合にそれが起こっているかどうかを確認することをお勧めします。

于 2011-02-01T16:26:30.590 に答える