3

应用程序委托是一个 UIResponder 子类(从 Xcode 4.2 开始),因此它应该能够接收触摸和运动事件。我在我的 AppDelegate 类中添加了这个,但它不起作用:

-(BOOL)canBecomeFirstResponder
{
    return YES;
}

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

它当然可以在视图控制器中工作,但我想检测应用程序范围内的抖动。

4

3 回答 3

3

做这个:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [self becomeFirstResponder];

}
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {

    NSLog(@"motionBegan");

}

-(BOOL)canBecomeFirstResponder {
return YES;
}
于 2013-08-01T00:15:52.550 回答
2

我扩展了 UIApplication 类并添加了对 main 的类引用:MyApplication.h

@interface MyApplication : UIApplication

@end

我的应用程序.m

@implementation MyApplication

- (void) sendEvent:(UIEvent *)event
{
    if( event && (event.subtype==UIEventSubtypeMotionShake))
    {
        AppDelegate *objAppDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

        [objAppDelegate doWhatEver];
        [super sendEvent:event];
    }
    else
    {
        [super sendEvent:event];
    }
}

@end

以及 main.m 中的最后一步

int main(int argc, char *argv[])
{
return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([AppDelegate class]));
}

这适用于所有情况。

于 2015-03-05T09:11:49.513 回答
0

据我所知,它应该需要成为接收事件的第一响应者。如果你的应用有 UINavigationController 或 UITabController,也许你可以尝试在那里接收它。

于 2013-01-23T16:51:12.970 回答