2011-12-19 49 views
17

TwUI,有一种叫做redrawTUIView方法。它强制视图重绘,但它也带有视图的新旧状态之间的自由衰落动画。用淡出动画重绘UIView?

我想知道如果这样的事情在一个正常的UIView是可能的。基本上,我如何重新绘制视图(setNeedsDisplay)与旧状态和新状态之间的淡出动画?

+0

这个问题是相似的,但不完全是我正在寻找:http://stackoverflow.com/questions/4730110/i-want-to-animate-in-fact-fade-within-drawrect –

+0

你需要与其他问题有什么不同? –

+0

这个问题似乎只是在视图中应答褪色,而不是用淡入淡出过渡更新视图。 –

回答

38

使用+[UIView transitionWithView:duration:options:animations:completion:]UIViewAnimationOptionTransitionCrossDissolve选项,动画块内,强制视图的层立即重绘其内容。

[myView setNeedsDisplay]; 
[UIView transitionWithView:myView duration:1 
    options:UIViewAnimationOptionTransitionCrossDissolve 
    animations:^{ 
     [myView.layer displayIfNeeded]; 
    } completion:nil]; 
+1

你是男人!完美工作。我真的应该刷我的核心动画,不是吗? –

+0

哈哈,也许吧。我从WWDC 2011的* [Core Animation Essentials](https://developer.apple.com/videos/wwdc/2011/#core-animation-essentials)*视频中了解了许多*。但对于您的问题,我也必须编写一个小测试程序来改变代码创建的CALayer的内容属性并查看附加的动画。 –

+0

感谢您的链接,我会在某个时候观看它。我还购买了Zarra&Long的书* Core Animation *,但我很惭愧地说我还没有读过它。是时候休息一下了! :) –

1

如何使用交叉叠的UIView过渡?

[UIView transitionWithView:aView 
        duration:TIME_INTERVAL 
        options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
        // Change the view's state 
       } 
       completion:^(BOOL finished) { 
        // Completion block 
       }];