如何在 iOS 4.0+ 中使用抖动事件?我测试了这个解决方案,但在 4.1 中不起作用。是否有可能发生了变化或者我做错了什么?运动开始:不工作
问问题
356 次
1 回答
2
从这个 SO 问题我如何检测何时有人摇晃 iPhone? 主要技巧是您需要一些 UIView(不是视图控制器)作为 firstResponder 来接收抖动事件消息。以下是您可以在任何 UIView 中用于获取抖动事件的代码:
@implementation ShakingView
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if ( event.subtype == UIEventSubtypeMotionShake )
{
// Put in code here to handle shake
}
if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
[super motionEnded:motion withEvent:event];
}
- (BOOL)canBecomeFirstResponder
{ return YES; }
@end
您可以轻松地将任何 UIView(甚至系统视图)转换为可以获取抖动事件的视图,只需使用这些方法对视图进行子类化(然后在 IB 中选择这种新类型而不是基本类型,或者在分配看法)。
在视图控制器中,您希望将此视图设置为第一响应者:
- (void) viewWillAppear:(BOOL)animated
{
[shakeView becomeFirstResponder];
[super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
[shakeView resignFirstResponder];
[super viewWillDisappear:animated];
}
不要忘记,如果您有其他视图成为用户操作的第一响应者(例如搜索栏或文本输入字段),您还需要在其他视图辞职时恢复摇晃视图的第一响应者状态!
即使您将 applicationSupportsShakeToEdit 设置为 NO,此方法也有效。
于 2011-04-07T08:23:10.703 回答