1

所以让我首先澄清一下我已经实现了哪些代码

-(BOOL)canBecomeFirstResponder 
{
    return YES;
}

- (void) viewWillAppear:(BOOL)animated 
{
    [super viewWillAppear:animated];
    [self becomeFirstResponder];
}

- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

- (void)viewWillDisappear:(BOOL)animated 
{
    [self resignFirstResponder];
    [super viewWillDisappear:animated];
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (motion == UIEventSubtypeMotionShake)
    {
        NSLog(@"FUUU");
    }
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (motion == UIEventSubtypeMotionShake)
    {
        NSLog(@"FUUU");
    }
}

这都在 UIViewController 类中

- (void) applicationDidFinishLaunching:(UIApplication*)application我已经设置了

[application setApplicationSupportsShakeToEdit:YES];

然而它什么也没做,没有检测到任何单一的运动。我不确定还能做什么。这似乎对许多其他人有效,所以我很困惑为什么我与众不同......可能是因为它是通过 UINavigationController 吗?或者因为我通过 plist 加载主应用程序而我的主应用程序看起来像这样

retVal = UIApplicationMain(argc, argv, nil, nil);

我完全被难住了。

4

3 回答 3

3

为了检测摇动手势,您需要继承 UIView 并实现以下方法(不要在 UIViewController 上实现这些方法):

  • (BOOL)可以成为第一响应者
  • (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

然后将子类视图添加到 UIViewController 并通过调用 -becomeFirstResponder 使其成为第一响应者。

于 2012-09-07T22:49:00.287 回答
2

您不需要设置[application setApplicationSupportsShakeToEdit:YES];,因为这是默认值,iOS 仅将其用于 Shake to Undo/Redo。

如果您想在视图控制器中捕捉运动,您需要将此属性设置为 NO[application setApplicationSupportsShakeToEdit:NO];并自行处理。

事件处理编程指南中所述。

希望这可以帮助。

PS:以防万一,您在viewDidAppear方法中调用了错误的超级。这应该是:

- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}
于 2012-09-07T09:27:31.983 回答
0

谢谢大家的回复,但我最终使用了不同的方法,我在应用程序委托中访问了加速度计,然后通过 nsnotification 中心向显示的当前 ui 导航控制器发送 nsnotifcation

- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
{
    [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:nil userInfo:nil];

} 
于 2012-09-25T05:44:21.750 回答