Я тестировал это как на iPad, так и на iPad Simulator, и после одного успешного встряхивания метод motionBegan никогда не вызывается. Ниже приведен фрагмент моей программы.Shake больше не работает после UIAlertview
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if(event.type == UIEventSubtypeMotionShake)
{
NSLog(@"Shake event occurred.");
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Information" message:@"Some message here" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
alert.tag = shakeTag;
[alert show];
}
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:NO];
[self becomeFirstResponder];
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:NO];
}
-(void)viewDidDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewDidDisappear:NO];
}
Что именно предотвращает появление метода motionBegan? Я хотел бы, чтобы UIAlertView был представлен ровно один раз для первого встряхивания и уволен за все последующие тряски. У меня есть догадка о том, что первый ответчик по-прежнему привязан к UIAlertView, который не позволяет снова вызвать метод motionBegan.
Обновление: В моем соответствующем UIView создается созданный файл UIActionSheet. который вызывается и реализуется в моем UIView), и я запускаю метод motionBegan (который находится в моем UIViewController) в то же самое время, которое отображается на экране UIActionSheet, проблема, когда метод motionBegan больше не может быть вызван.
Впоследствии UIAlertView уволен с любого выбора кнопки, метод motionBegan больше не вызывается, но UIActionSheet работает отлично. В UIView нет назначения firstResponder, и в UIViewController существует только «canBecomeFirstResponder». Есть идеи?
Я скопировал и вставил ваш код, и он неоднократно работал на симуляторе iPad (единственное, что я вынул, это строка alert.tag = shakeTag). – rdelmar
@rdelmar Это не работает для меня на симуляторе iPAD. Жест аппаратного дрожания больше не вызывает motionBegan, так как есть только один вывод следующей строки: «NSLog (@« Событие Shake произошло »); У меня есть следующий метод обработки этого конкретного тега предупреждения: «- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex« – David
Ну, я понятия не имею, почему ваш не работает. Я добавил тег и метод делегата alert, и он все еще отлично работает для меня. – rdelmar