Проблема с простой анимацией

Я использую анимацию при нажатии кнопки, в первый раз показываю представление, а во второй раз скрываю представление. вот мой код для скрытия вида

-(IBAction)clickme
{
[UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];

    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationDelegate:self];


    [view1 setAlpha:0.0];
[UIView commitAnimations];
}

аналогичный код существует для отображения представления.

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

Я не хочу отключать эту кнопку во время анимации.

Есть ли другой способ?


person Kumar sonu    schedule 15.03.2011    source источник


Ответы (2)


Вам нужно отслеживать, происходит ли анимация, и игнорировать щелчок, если это так.

Объявите переменную экземпляра BOOL animating; в заголовке вашего класса и инициализируйте ее значением NO в вашем init.

Затем,

-(IBAction)clickme
{
    if (animating) return;
    animating = YES;

[UIView beginAnimations:nil context:self];
    [UIView setAnimationDuration:0.3];

    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationDelegate:self];

    [view1 setAlpha:0.0];
[UIView commitAnimations];
}

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    if (context == self)
        animating = NO;
}
person joerick    schedule 15.03.2011
comment
Вам не хватает [UIView setAnimationDidStopSelector:...];. ;) - person hennes; 15.03.2011
comment
@hennes Нет, я так не думаю, [UIView setAnimationDelegate:self]; означает, что эти сообщения отправляются без явной установки селектора. - person joerick; 15.03.2011
comment
Уверены ли вы? Я всегда думал, что мне нужно установить их вручную. Ну, извините мою неопытность. - person hennes; 15.03.2011

попробуйте использовать + (void) setAnimationBeginsFromCurrentState: (BOOL) fromCurrentState:

-(IBAction)clickme
{
[UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationBeginsFromCurrentState:YES];

    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationDelegate:self];


    [view1 setAlpha:0.0];
[UIView commitAnimations];
}
person meronix    schedule 15.03.2011