#objective-c #xcode #shake #becomefirstresponder
#objective-c #xcode #встряхнуть #станьте первым ответчиком
Вопрос:
Я пытаюсь реализовать распознавание встряхивания, которое работает во всем моем приложении. Чтобы сделать это, я добавляю следующий код в свой xxxAppDelegate.m:
-(BOOL)canBecomeFirstResponder {
return YES;
}
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventSubtypeMotionShake) {
NSLog(@"Shaken, not stirred.");
}
}
Но поскольку в файле .h делегат определен как
@interface xxxAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
Я не могу использовать
[self becomeFirstResponder];
в .m, чтобы приложение делегировало первого ответчика. Поэтому, конечно, это не работает.
Какой был бы наилучший способ заставить это работать?
Ответ №1:
Что произойдет, если вы измените делегат приложения на подкласс UIResponder
?
Редактировать
Вы можете прочитать о цепочке ответчиков здесь в документации.