应用程序委托是一个UIResponder子类(自Xcode 4.2起),因此它应该能够接收触摸和动作事件。我在我的AppDelegate类中添加了它,但它无法正常工作:
-(BOOL)canBecomeFirstResponder
{
return YES;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion == UIEventSubtypeMotionShake) {
NSLog(@"shake");
}
}
当然,它在视图控制器中工作,但我想检测应用程序范围内的抖动。
答案 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,也许你可以尝试在那里接收它。