我正在使用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;
                         }];
    }
}

最佳答案

在调用beginIgnoringInteractionEvents之前先调用animateWithDuration,然后在完成处理程序中调用endIgnoring...

10-08 05:59