【发布时间】:2010-11-23 08:28:37
【问题描述】:
我正在尝试在此页面上实现摇动“教程”,但我认为我遗漏了一些东西。我将他的加速度计功能复制到 myAppViewController.m 文件中,并在其中放置了一些 nslog,以查看当我使用模拟器“摇动”功能时它是否进入该功能。调试控制台中没有显示任何内容。
http://mithin.in/2009/07/28/detecting-a-shake-using-iphone-sdk
谁能解释我可能遗漏了什么?或者指点我一个教程?
我发现了这个,看起来很有希望,但我不知道如何“把它放在 UIView 中” How do I detect when someone shakes an iPhone?
编辑 - 由于接受了答案的建议,现在这是我的工作代码。
这是我在 3.0 iphone sdk 中检测摇晃手势的代码。
-(BOOL)canBecomeFirstResponder {
return YES;
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
- (void)viewWillDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewWillDisappear:animated];
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"{motion ended event ");
if (motion == UIEventSubtypeMotionShake) {
NSLog(@"{shaken state ");
}
else {
NSLog(@"{not shaken state ");
}
}
【问题讨论】:
-
是的,它在模拟器中工作。
-
其实调用
becomeFirstResponder是没有必要的。允许 viewController 响应运动事件所需的唯一操作是确保 viewController 可以成为 firstResponder。如文档中所述,UIView 将motionBegan等消息向上传递到响应者链,最终将找到视图的控制器,只要canBecomeFirstResponder返回YES。
标签: iphone iphone-sdk-3.0 delegates shake