UIButtons 不会在动画块期间淡出

Posted

技术标签:

【中文标题】UIButtons 不会在动画块期间淡出【英文标题】:UIButtons will not fade out during animation block 【发布时间】:2012-01-14 14:03:44 【问题描述】:

我有一组 UIButtons 和 UILabels 我想在选择一个按钮并且它是正确的按钮时淡出。

我已经尝试了很多东西(在代码块中对它们进行了注释),只有 UILabel 淡出。我在这里错过了什么?

-(IBAction)answerButtonPressed:(UIButton *)sender 
NSLog(@"Game Question Answer Pressed: %i", sender.tag);
NSLog(@"%@", sender.titleLabel.text);

int selectedAnswer =0;
selectedAnswer = [question.answer intValue];

if (selectedAnswer == sender.tag) 
    NSLog(@"GameQ %@ is the correct answer", sender.titleLabel.text);

    //self.toggleView;

    [labelA setAlpha:0];
    [labelB setAlpha:0];
    [labelC setAlpha:0];
    [labelD setAlpha:0];


    /*
    [buttonA setAlpha:0];
    [buttonB setAlpha:0];
    [buttonC setAlpha:0];
    [buttonD setAlpha:0];

    [buttonA setHidden:YES];
    [buttonB setHidden:YES];
    [buttonC setHidden:YES];
    [buttonD setHidden:YES];
     */        
    [sender setAlpha:1];
    [sender setHidden:NO];

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.5];

    [UIView animateWithDuration:2.0
                          delay:0.0
                        options: UIViewAnimationCurveEaseOut
                     animations:^buttonA.alpha = 0;
                     completion:nil];

    [UIView setAnimationDelegate:[UIApplication sharedApplication]];
    [UIView setAnimationDidStopSelector:@selector(endIgnoringInteractionEvents)];

    [UIView commitAnimations];

我已经清理了这个方法并且只使用了一种类型的动画块。 UIButton 仍然不会淡出,但标签会淡出。这是我的动画块:

        [UIView animateWithDuration:2.0
                          delay:0.0
                        options: UIViewAnimationCurveEaseOut
                     animations:^buttonA.alpha = 0;
                     completion:nil];

    [UIView animateWithDuration:2.0
                          delay:0.0
                        options: UIViewAnimationCurveEaseOut
                     animations:^labelA.alpha = 0;
                     completion:nil];

【问题讨论】:

【参考方案1】:

我会立即注意到一些事情。您正在结合两种类型的动画技术。新旧:

要么做:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.5];

buttonA.alpha = 0;

[UIView commitAnimations];

OR(并且首选,因为它是“现代”方式)

[UIView animateWithDuration:2.0
                      delay:0.0
                    options: UIViewAnimationCurveEaseOut
                 animations:^buttonA.alpha = 0;
                 completion:nil];

如您所见,将两者结合起来可能会导致块被多次调用,因为第一个动画技术插入了第二个动画技术。基本上,将许多动画放入队列中,非常快地将按钮淡化为 0。

此外,默认情况下(至少使用块)默认情况下禁用用户交互。不需要明确地这样做。

【讨论】:

我已经清理了该方法,并采纳了您建议使用更“现代”的方法。按钮仍然存在,但标签像以前一样消失了。一定有什么东西是压倒一切的?请在最初的帖子中查看我的编辑。 您不需要多个块来处理您希望更改的所有内容。你可以把你的 labelA.alpha =0;你的 buttonA.alpha = 0;在同一个街区。您确定已将 buttonA 连接到界面生成器中的按钮实例吗? IE。现在是零吗? 哈哈,我真是个白痴。是的,因为我正在向 ID 发送者发送消息,所以我不需要连接我的参考插座。现在我需要向视图发送消息,我检查了一下,笔尖没有接线。

以上是关于UIButtons 不会在动画块期间淡出的主要内容,如果未能解决你的问题,请参考以下文章

淡出/淡入 UiView 动画

Angular 5:路由期间的淡入淡出动画(CSS)

UIButton 图像从 URL 加载后淡入淡出

用于 ipad 的 UITableViewCell 中的 UIButtons

looper.js 插件 - 交叉淡入淡出动画之间不可见的图像

Lottie 动画加载时如何淡入淡出?