使用淡入淡出动画重新绘制UIView?

19
在`TwUI`中,`TUIView`有一个名为`redraw`的方法。它强制视图重新绘制,同时还提供了在视图的旧状态和新状态之间进行自由渐变动画的功能。
我想知道在普通的`UIView`中是否也可以实现这样的效果。基本上,我如何使视图(`setNeedsDisplay`)在旧状态和新状态之间具有淡入淡出的动画效果?

这个问题有些类似,但不完全是我要找的:https://dev59.com/91PTa4cB1Zd3GeqPj4JY - sudo rm -rf
你需要与其他问题有何不同? - rob mayoff
那个问题似乎只回答了如何淡入一个视图,而不是如何使用淡入过渡更新一个视图。 - sudo rm -rf
2个回答

46

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

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

1
你太棒了!完美地运作了。我真的应该好好学习一下核心动画,不是吗? - sudo rm -rf
哈哈,也许吧。我从2011年WWDC的核心动画基础视频中学到了很多东西。但是对于你的问题,我还需要编写一个小测试程序,改变由代码创建的CALayer的contents属性,并查看它附加的动画。 - rob mayoff
谢谢你提供的链接,我会在某个时候观看它。我还买了Zarra和Long的书《核心动画》,但是我很惭愧地说我还没有读过。现在是休息一下阅读的时间! :) - sudo rm -rf
不应该将动画代码放在 drawRect: 方法中。 - titaniumdecoy
@titaniumdecoy 你说得对,但我最初回答时不知道。 :) 我已经改变了我的答案。 - rob mayoff

1

使用交叉溶解的UIView转换怎么样?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接