我可以在AppDelegate中收到摇动事件吗?

时间:2012-10-08 15:51:16

标签: iphone ios uiapplicationdelegate uiresponder

应用程序委托是一个UIResponder子类(自Xcode 4.2起),因此它应该能够接收触摸和动作事件。我在我的AppDelegate类中添加了它,但它无法正常工作:

-(BOOL)canBecomeFirstResponder
{
    return YES;
}

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

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

3 个答案:

答案 0 :(得分:3)

这样做:

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

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

    NSLog(@"motionBegan");

}

-(BOOL)canBecomeFirstResponder {
return YES;
}

答案 1 :(得分:2)

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

@interface MyApplication : UIApplication

@end

MyApplication.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]));
}

这适用于所有情况。

答案 2 :(得分:0)

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