Синхронизация анимации UIView

Привет, в ответ на события касания мое приложение просматривает анимацию. Если пользователь работает очень быстро и делает еще одно касание, даже когда происходит текущая анимация, все идет наперекосяк.

Есть ли стандартный способ решения этой проблемы, предоставляемый фреймворком? Или я неправильно показываю анимацию?

В настоящее время проверяется флаг (animationInProgress), чтобы справиться с этим, но я хотел знать, нужно ли нам для этого прибегать к этому?

Вот код :

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    NSMutableArray *c = (NSMutableArray*)context;
    UINavigationController *nc = [c objectAtIndex:0];
    [nc.view removeFromSuperview];
    animationInProgress = NO;
}

- (void)transitionViews:(BOOL)topToBottom {
    if (animationInProgress) {
        return;
    }
    animationInProgress = YES;
    NSMutableArray *context = [[NSMutableArray alloc] init];
    [UIView beginAnimations:@"myanim" context:context];
    [UIView setAnimationDuration:0.7f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

    UIViewController *from;
    UIViewController *to;
    if (navController3.view.superview == nil ) {
        from = navController2;
        to = navController3;
    } else {
        from = navController3;
        to = navController2;
    }

    int height;
    if (topToBottom) { 
        height = -1 * from.view.bounds.size.height;
    } else {
        height = from.view.bounds.size.height;
    }

    CGAffineTransform transform = from.view.transform;

    [UIView setAnimationsEnabled:NO];
    to.view.bounds = from.view.layer.bounds;
    to.view.transform = CGAffineTransformTranslate(transform, 0, height);
    [window addSubview:to.view];

    [UIView setAnimationsEnabled:YES];
    from.view.transform = CGAffineTransformTranslate(from.view.transform, 0, -1 * height);
    to.view.transform = transform;

    [context addObject:from];

    [UIView commitAnimations];

    return;
}
7
задан vance 17 January 2011 в 01:58
поделиться