【问题标题】:How do I fade in /out a rectangle or text?如何淡入/淡出矩形或文本?
【发布时间】:2010-12-28 17:33:17
【问题描述】:

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

【问题讨论】:

    标签: iphone cocoa-touch core-animation


    【解决方案1】:

    为什么你不想使用 UIView 的动画块?用它动画视图(UILabel 或其他)的不透明度变化非常容易。例如,以下代码将在 0.5 秒内淡出给定视图:

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5f];
    
    viewToFadeOut.alpha = 0.0f;
    
    [UIView commitAnimations];  
    

    要淡入,只需将 0.0f 的 alpha 值替换为 1.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"];
    

    如果您只想淡入/淡出视图周围的边框,请尝试为 UIView 层的borderColor 属性设置动画(与上面的CABasicAnimation 相同,只需将opacity 替换为borderColor 并将toValue 替换为CG颜色投射到id)。

    【讨论】:

    • Emm.. 我想要的是淡入/淡出视图上的文本,而不是视图本身。是的,我可以为要在视图上呈现的每个文本 sn-p 创建 UILabel 并使用 UIView 动画支持。但我想知道这是否是一种简单且成本较低的方法。因为我只想在视图上呈现一些静态文本。如果每个文本都由 UILabel 表示,如果上面有 100 多个文本怎么办?所以我选择使用CGContextShowText,但是还没想好怎么实现淡入淡出。再次感谢。
    • Quartz 绘图是一项昂贵的操作,尤其是在您绘制文本时。如果您对视图中的每个文本元素都使用 Quartz,然后更改其中一个文本项,您仍然需要重新绘制整个视图。确定 100 个使用 Core Animation 动画的文本标签是否真的会成为问题的最佳方法是在设备上简单地试用一下。但是,我可以保证手动重绘每一帧动画的文本会慢很多。
    • @Thor - 我刚刚在这里的一个应用程序中尝试过,两种动画方法都可以很好地淡入和淡出 UIScrollView 中的 UIView。 UIScrollView 没有理由干扰这些类型的动画。你的情况一定有其他事情发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多