iOS, позволяющий одно касание в одно время - PullRequest
0 голосов
/ 24 февраля 2012

Я использую iOS 5 для реализации приложения.

В этом приложении у меня есть 4 кнопки, каждая кнопка запускает анимацию, чтобы отобразить UIView.Однако, если я нажимаю кнопку, а затем другую, вид, который появился первым, должен исчезнуть, и вид новой кнопки будет отображаться.

У меня это работает до сих пор.Но если пользователь быстро нажмет две кнопки, он отобразит два вида.Как я могу гарантировать, что обрабатывается только один раз событие касания?

Действие для кнопки выглядит примерно так:

- (void)buttonPressed:(id)sender
{
    MenuButton *aButton = (MenuButton *)sender;
    switch (aButton.tag) {
        case 0:
            if (displayingView && currentlyDisplayingView != picker1)
                [self toggleView:currentlyDisplayingView atIndex:currentIndex];
            [self toggleView:picker1 atIndex:aButton.tag];
            currentlyDisplayingView = picker1;
            currentIndex = aButton.tag;
            break;
        case 1:
            if (displayingView && currentlyDisplayingView != picker2)
                [self toggleView:currentlyDisplayingView atIndex:currentIndex];
            [self toggleView:picker2 atIndex:aButton.tag];
            currentlyDisplayingView = picker2;
            currentIndex = aButton.tag;
            break;
        case 2:
            if (displayingView && currentlyDisplayingView != picker3)
                [self toggleView:currentlyDisplayingView atIndex:currentIndex];
            [self toggleView:picker3 atIndex:aButton.tag];
            currentlyDisplayingView = picker3;
            currentIndex = aButton.tag;
            break;
        default:
            break;
    }
    NSLog(@"Pressed %@",[buttonNames objectAtIndex:aButton.tag]);
}

И код анимации:

- (void)toggleView:(UIView *)picker
             atIndex:(NSInteger)index
{
    if (picker) {
        picker.hidden = NO;
        [UIView animateWithDuration:0.5 
                         animations:^{
                             picker.alpha = abs(picker.alpha - 1);
                             CGRect rect = picker.frame;
                             if (rect.size.height == 0){
                                 rect.size.height = 76;
                             } else if (rect.size.height == 76) {
                                 rect.size.height = 0;
                             }
                             picker.frame = rect;
                             for (int i = index+1; i < [viewButtons count]; i++) {
                                 UIButton *aButton = [viewButtons objectAtIndex:i];
                                 CGRect frame = aButton.frame;
                                 if (rect.size.height == 0){
                                     frame.origin.y -= 75;
                                 } else if (rect.size.height == 76) {
                                     frame.origin.y += 75;
                                 }
                                 aButton.frame = frame;
                             }
                         }
                         completion:^(BOOL success){
                             if (picker.alpha == 0){
                                 picker.hidden = YES;
                             } else if (picker.alpha == 1) {
                                 picker.hidden = NO;
                             }
                             displayingView = !displayingView;
                         }];
    }
}

1 Ответ

1 голос
/ 24 февраля 2012

Позвоните beginIgnoringInteractionEvents перед вызовом animateWithDuration и вызовите endIgnoring... в обработчике завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...