2012-11-28 111 views
0

我开始使用UIView动画。并且不能让这样的代码正常工作。这里是我有什么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秒,并且在没有任何转换的情况下弹出对象。谁能告诉我我在这里失踪了什么?

回答

9

您正在改变hidden属性设置为true后,才动画结束了,所以也没有出现,直到动画完成。你应该在动画开始前做:

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

傻我..这没有工作。但是现在又出现了另一个问题。我需要在视图中加入_language.hidden = true。首先将其隐藏起来。我没有正确地获得第一个动画,它会立即显示。之后,一切都按预期工作。想法? – Datenshi

+0

通过将viewdidload中的alpha设置为0来实现它。谢谢您的回答! – Datenshi

+0

http://stackoverflow.com/a/29080894/1442541 – evya

5

您的_Language.hidden设置为true,因此当它是动画时,屏幕上不会显示任何内容。您需要在动画之前将其显示出来。将隐藏属性设置为false,然后显示动画。只有在完成块中添加它时,反向才会起作用。

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

和竣工块将其删除,

completion:^(BOOL finished) { 
        }]; 
+0

谢谢你的回答,但我会接受@shannoga的回答。因为他在3秒内速度更快:) – Datenshi

+1

事实上,我快了10秒。 :)你可以通过点击按最旧的标签进行排序来验证(接受后不会显示)。反正这很好。很高兴它有帮助。 – iDev