Я делаю модальное частичное наложение в моем приложении с помощью кода из «Полумодальных (прозрачных) диалогов на iPhone» на ramin.firoozye.com. При этом кнопка, вызывающая модальный режим, все еще видна и активна. Я буду скрывать эту кнопку, когда модал появляется, но я хочу быть уверен, что если пользователь дважды щелкает очень быстро, новый модал не появляется при каждом щелчке. Как лучше всего проверить, что модал еще не существует при вызове с помощью нажатия кнопки?
Вы можете скачать тестовый проект здесь . Для тех, у кого нет xcode, соответствующие функции ниже:
Я вызываю модальное нажатие кнопки следующим образом:
- (IBAction)displayModal:(id)sender {
ModalViewController *modalController = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];
modalController.view.frame = CGRectOffset(modalController.view.frame, 0, 230);
[self showModal:modalController.view];
}
Затем используйте эту функцию, чтобы анимировать пользовательский мод поверх текущего вида:
- (void)showModal:(UIView*) modalView {
UIWindow* mainWindow = (((TestAppDelegate*) [UIApplication sharedApplication].delegate).window);
CGPoint middleCenter = modalView.center;
CGSize offSize = [UIScreen mainScreen].bounds.size;
CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
modalView.center = offScreenCenter; // we start off-screen
[mainWindow addSubview:modalView];
// Show it with a transition effect
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4]; // animation duration in seconds
modalView.center = middleCenter;
[UIView commitAnimations];
}
Затем я отклоняю модальное нажатие кнопки следующим образом:
- (IBAction)dismissModal:(id)sender {
[self hideModal:self.view];
}
И затем используйте эти функции, чтобы оживить модальный экран и очистить себя:
- (void)hideModal:(UIView*) modalView {
CGSize offSize = [UIScreen mainScreen].bounds.size;
CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
[UIView beginAnimations:nil context:modalView];
[UIView setAnimationDuration:0.7];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(hideModalEnded:finished:context:)];
modalView.center = offScreenCenter;
[UIView commitAnimations];
}
- (void)hideModalEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
UIView* modalView = (UIView *)context;
[modalView removeFromSuperview];
[self release];
}
Любая помощь очень ценится!