2009-12-21 32 views
5

我想达到淡入/淡出矩形或文本的效果。我在我的UIVIew的drawRect:方法中调用CGContextFillRect或CGContextShowText。我想知道是否有一种方法可以在不使用UIView的支持下实现动画(例如[UIView beginAnimations ::]。我想达到的效果类似于微软的bing serach引擎,比如那些小黑方块淡入/当你在网页上移动时淡入淡出。提前致谢!如何淡入/淡出矩形或文本?

回答

23

为什么你不想使用UIView的动画块?用一个视图的不透明度(UILabel或其他)来改变动画是非常容易的。 ,下面的代码将淡出给定视图在0.5秒的持续时间:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5f]; 

viewToFadeOut.alpha = 0.0f; 

[UIView commitAnimations]; 

淡入,只需更换具有1.0f 0.0F的α值

您可以使用手动构造CABasicAnimation,操纵的UIView的层做同样的:

CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
fadeOutAnimation.duration = 0.5f; 
fadeOutAnimation.removedOnCompletion = NO; 
fadeOutAnimation.fillMode = kCAFillModeForwards; 
fadeOutAnimation.toValue = [NSNumber numberWithFloat:0.0f]; 
[viewToFadeOut.layer addAnimation:fadeOutAnimation forKey:@"animateOpacity"]; 

如果你想要做的是淡入/淡出边界周围的视图,尝试动画的borderColor属性UIView的图层(与上述CABasicAnimation相同,仅将opacity替换为borderColor,将CGV颜色替换为toValue改为id)。

+1

嗯..我想要淡入淡出视图上的文本,而不是视图本身。是的,我可以为每个要在视图上呈现的文本片段创建UILabel,并使用UIView动画支持。但我想知道这是否是一种简单而便宜的方法。因为我只想在视图上渲染一些静态文本。如果每个文本都由一个UILabel表示,那么如果有100多个文本呢? 所以我选择使用CGContextShowText,但还没有想出如何实现淡入/淡出。再次感谢。 – Tianzhou 2009-12-22 09:21:01

+1

石英绘图是一项昂贵的操作,特别是在绘制文本时。如果您在视图中为每个文本元素使用Quartz,然后更改其中一个文本项,则仍然需要重新绘制整个视图。确定使用核心动画制作动画的100个文本标签是否真的会成为问题的最好方法是简单地在设备上进行尝试。但是,我可以保证每个动画帧的文本的手动重绘速度要慢得多。 – 2009-12-23 15:11:17

+0

@Thor - 我只是在这里的应用程序中试过,并且这两种动画方法都适用于在UIScrollView中淡入淡出UIView。没有理由UIScrollView应该干扰这些动画。你的情况一定还有其他事情要做。 – 2012-01-30 19:39:09