Objective c 目标C:震动问题

Objective c 目标C:震动问题,objective-c,ios,animation,accelerometer,shake,Objective C,Ios,Animation,Accelerometer,Shake,我检测到将启动动画的抖动,当它结束时,它将停止动画。有时它可以工作,但有时它没有意识到震动已经结束,所以它永远不会调用motionEnded方法。还有其他人有这个问题吗?解决方案 -(BOOL)canBecomeFirstResponder { return YES; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:NO]; [self becomeFirstResponder]; } -(void)viewWillD

我检测到将启动动画的抖动,当它结束时,它将停止动画。有时它可以工作,但有时它没有意识到震动已经结束,所以它永远不会调用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-2中的内容如下:

。。。然而,有一点很重要 触摸事件和触摸事件之间的区别 震动运动事件。当用户 开始摇晃设备、系统 将运动事件发送到第一个 运动中的响应者开始:withEvent: 消息如果第一反应者 不处理事件,而是传播 在响应者链上。如果震动 持续不到一秒钟左右,这个 系统发送motionEnded:withEvent: 给第一响应者的消息但是如果 震动持续时间更长,或者 系统确定该运动不是运动 摇动,第一响应者收到 motionCancelled:withEvent:message.


我建议添加一个motionCancelled:WithEventCallback,看看在没有收到motionEnded呼叫的情况下是否会发生这种情况。

苹果似乎在讨论您在这里遇到的“不一致性”:

清单4-2中的内容如下:

。。。然而,有一点很重要 触摸事件和触摸事件之间的区别 震动运动事件。当用户 开始摇晃设备、系统 将运动事件发送到第一个 运动中的响应者开始:withEvent: 消息如果第一反应者 不处理事件,而是传播 在响应者链上。如果震动 持续不到一秒钟左右,这个 系统发送motionEnded:withEvent: 给第一响应者的消息但是如果 震动持续时间更长,或者 系统确定该运动不是运动 摇动,第一响应者收到 motionCancelled:withEvent:message.

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