UIView 动画只工作一次

Posted

技术标签:

【中文标题】UIView 动画只工作一次【英文标题】:UIView Animation Working Only Once 【发布时间】:2011-02-16 14:32:31 【问题描述】:

我正在尝试关闭我之前使用相同的动画块添加的UIView,并从alpha 0 -> alpha 100[self.view addSubview:newInitiateWindow.view]; 淡入淡出创建窗口时动画块正确执行,但是当它被关闭时,它只是停止 0.75 秒,然后消失,没有任何动画。即使我删除 removeFromSuperview 并释放调用,它也不会将淡入淡出设置为透明。

这是应该生成动画的代码:

[UIView transitionWithView:newInitiateWindow.view
    duration:0.75
    options:UIViewAnimationOptionCurveEaseIn
    animations:^ 
        newInitiateWindow.view.alpha = 0;
    
    completion:^(BOOL finished)
        if(finished)
            [newInitiateWindow.view removeFromSuperview];
            [newInitiateWindow release];
            newInitiateWindow=nil;
        
    
];

【问题讨论】:

尝试将 UIViewAnimationOptionAllowAnimatedContent 添加到您的选项中。 我尝试了同样的结果。这很奇怪,因为这个完全相同的代码适用于淡入(除了更改 alpha = 100)并且我在开始动画块之前添加了子视图。 好的,这里有一些进一步的测试......即使使用最基本的块动画,我仍然无法让它工作:[UIView animateWithDuration:1.0 animations:^ newInitiateWindow.view.alpha = 0.0 ; ]; 这段代码是在主线程上运行的吗? 【参考方案1】:

你是 100 的字面意思吗?完整的 alpha 版本是 1.0,这可能会导致一些问题。

这可能是 ios 和代码位置的错综复杂,但很可能只是输入错误,可能是间接的拼写错误

【讨论】:

你修好了!非常感谢。我不敢相信我是个白痴。有趣的是,它使用 100 的值淡入淡出,但使用 0 的值不会淡出。将其切换为 1.0f 淡入和 0.0f 淡出是解决方案。【参考方案2】:

过渡应该添加/删除过渡中列出的视图的子视图。他们不应该修改视图的属性。你想要+animateWithDuration:delay:options:animation:completion:

【讨论】:

如果我执行以下代码,行为完全相同:( [UIView animateWithDuration:0.75 delay:0.0 options:UIViewAnimationOptionAllowAnimatedContent animations:^ newInitiateWindow.view.alpha = 0; completion:^(BOOL完成) [newInitiateWindow.view removeFromSuperview]; [newInitiateWindow release]; newInitiateWindow = nil; ];

以上是关于UIView 动画只工作一次的主要内容,如果未能解决你的问题,请参考以下文章

UIView 动画在第一次尝试时没有动画

jQuery + Animate.css 动画只工作一次,动画不重置

UIView 动画无法正常工作?

动画 UIView 没有按预期工作

带有块的 UIView 动画如何在幕后工作

UIView 动画在 UITableViewCell 内无法正常工作