UIView动画隐藏和显示

Dat*_*shi 0 cocoa-touch block objective-c ios

我开始使用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;
                     }];
}
Run Code Online (Sandbox Code Playgroud)

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

sha*_*oga 9

hidden仅在动画结束后才将属性更改为true,因此在动画完成之前不会显示该属性.你应该在动画开始之前做到这一点:

if(_Language.hidden == true)
 {
 _Language.hidden = false;
[UIView animateWithDuration:1.0
                      delay:0.0
                    options:UIViewAnimationCurveEaseInOut
                 animations:^ {
                    _Language.alpha = 1.0;  
                 }];
 }
Run Code Online (Sandbox Code Playgroud)


iDe*_*Dev 5

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

_Language.hidden = false;
[UIView animateWithDuration:1.0 ...
Run Code Online (Sandbox Code Playgroud)

并从完成块中删除它,

completion:^(BOOL finished) {
                     }];
Run Code Online (Sandbox Code Playgroud)