UIView 动画隐藏和显示

Posted

技术标签:

【中文标题】UIView 动画隐藏和显示【英文标题】:UIView animation hide and show 【发布时间】:2012-11-28 08:13:07 【问题描述】:

我开始使用 UIView 动画。并且无法使此类代码正常工作。这是我所拥有的

if(_Language.hidden == true)

    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^ 
                        _Language.alpha = 1.0;
                     
                     completion:^(BOOL finished) 
                         _Language.hidden = false;
                     ];

else

    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^ 
                         _Language.alpha = 0.0;
                     
                     completion:^(BOOL finished) 
                         _Language.hidden = true;
                     ];

此代码以这种方式工作。隐藏动画按预期工作。但显示动画只等待 1 秒,然后弹出对象而没有任何过渡。谁能告诉我我在这里缺少什么?

【问题讨论】:

【参考方案1】:

您仅在动画结束后将hidden 属性更改为true,因此在动画完成之前它不会出现。你应该在动画开始之前做:

if(_Language.hidden == true)
 
 _Language.hidden = false;
[UIView animateWithDuration:1.0
                      delay:0.0
                    options:UIViewAnimationCurveEaseInOut
                 animations:^ 
                    _Language.alpha = 1.0;  
                 ];
 

【讨论】:

傻我..确实有效。但是现在又出现了一个问题。我需要 _language.hidden = true 查看 didload。首先隐藏它。我没有正确获得第一个动画,它会立即显示。之后,一切都按预期工作。想法? 通过将 viewdidload 中的 alpha 设置为 0 使其正常工作。谢谢您的回答!【参考方案2】:

您的_Language.hidden 设置为true,因此当它处于动画状态时,屏幕上不会出现任何内容。您需要在制作动画之前使其可见。将 hidden 属性设置为 false,然后显示动画。反向仅在您将其添加到完成块中时才能隐藏。

_Language.hidden = false;
[UIView animateWithDuration:1.0 ...

并将其从完成块中删除,

completion:^(BOOL finished) 
                     ];

【讨论】:

感谢您抽出宝贵时间回答,但我会接受@shannoga 的回答。因为他在 3 秒内更快:) 事实上我快了 10 秒。 :) 您可以通过单击按最旧选项卡排序来验证(接受后不会显示)。无论如何,这很好。很高兴它有帮助。

以上是关于UIView 动画隐藏和显示的主要内容,如果未能解决你的问题,请参考以下文章

显示和隐藏 UIView

当UIVIew隐藏在sameView中时,如何为UIview设置动画

UIStackView 显示/隐藏动画无法正常工作

如何用动画取消隐藏 UIView

UIStackView 显示/隐藏动画

在ios4.2中隐藏带有动画的uiview