0

我在按钮上使用动画,第一次显示视图,第二次隐藏视图。这是我隐藏视图的代码

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

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


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

有类似的代码用于显示视图。

但是当用户一次又一次地多次单击按钮时就会出现问题......意味着我的动画使用了 2 秒,但是如果用户在动画期间按下相同的按钮,那么输出结果非常糟糕。

我不想在动画期间禁用该按钮。

还有其他方法吗?

4

2 回答 2

2

尝试使用 + (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];
}
于 2011-03-15T12:35:50.863 回答
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;
}
于 2011-03-15T12:33:30.023 回答