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 下,它显示:

...但是,触摸事件和摇动事件之间存在一个重要区别。当用户开始摇动设备时,系统会在 motionBegan:withEvent: 消息中向第一响应者发送一个动作事件;如果第一响应者不处理事件,它会沿着响应者链向上传播。如果震动持续不到一秒左右,系统会向第一响应者发送 motionEnded:withEvent: 消息。但是,如果震动持续时间较长或者系统确定该动作不是震动,则第一响应者会收到motionCancelled:withEvent: 消息。

我建议添加一个 motionCancelled:withEvent 回调,以查看在您没有收到 motionEnded 调用的情况下是否会发生这种情况。

于 2011-02-01T16:26:30.590 回答