目标C:摇晃问题

时间:2011-01-27 16:45:37

标签: objective-c ios animation accelerometer shake

我正在检测将启动动画的抖动,当它结束时,它会停止制作动画。有时它可以工作,但有时它没有意识到震动已经结束所以它永远不会调用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];
}
}

1 个答案:

答案 0 :(得分:0)

Apple似乎在讨论您在这里遇到的“不一致”:http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html

在清单4-2中,它显示为:

  

......然而,有一个重要的   触摸事件与之间的区别   摇动事件。当用户   开始摇动设备,系统   向第一个发送动作事件   motionBegan中的响应者:withEvent:   信息;如果第一响应者   旅行不会处理这个事件   响应者链。如果摇晃   持续不到一秒左右,   系统发送一个motionEnded:withEvent:   消息给第一响应者。 但是如果   摇晃持续时间更长或是否持续   系统确定运动不是   摇,第一响应者收到一个   motionCancelled:withEvent:message。

我建议添加一个motionCancelled:withEvent回调来查看在没有动画调用的情况下是否会发生这种情况。