是否可以在文本中添加发光效果,同时避免大的性能损失?

时间:2013-08-11 22:57:24

标签: ios objective-c quartz-core

我有一些文字,我需要添加一个发光。问题是,当添加发光效果时,我会受到性能影响。

我有几个动画(它们一次只发生一个,并没有任何花哨或复杂)。这些是动画,例如更改UIView的alpha和scale值。

它们非常光滑!但是,当我将石英核心的光晕添加到屏幕上的文本时,其余的动画将停止如此流畅。

在我父亲的iPhone 3GS上,它们效果很好!然而,在我的iPhone 4上,它们变慢了!文档警告视网膜显示因为像素是4倍。但我真的需要这种发光效果!

// This work good!
    _timerLabel.shadowColor  = [UIColor darkGrayColor];
    _timerLabel.shadowOffset = CGSizeMake(0.0, 0.5);
    _timerLabel.alpha        = 1.0;

// This gets me a performance hit
_timerLabel.layer.shadowRadius  = 3;
_timerLabel.layer.shadowOpacity = 0.3;

无论如何我可以在不影响表现的情况下做到这一点吗?

修改

// This does help some! But it's not there yet.. It still has a heavy FPS loss
_timerLabel.layer.shouldRasterize = YES;

谢谢!

2 个答案:

答案 0 :(得分:0)

确保您设置shadowPath这样的

[myView.layer setShadowPath:[[UIBezierPath 
bezierPathWithRect:myView.bounds] CGPath]];

参考:On the importance of setting shadowPath

答案 1 :(得分:0)

Swift 4

发光动画效果不佳。假设你有一个UILabel或UITextField来保存你的文字。

1-使用动画创建UIView扩展

2-在文本字段,按钮,视图(UIView的任何子类)上使用它

UIView扩展

d= {cat: [bird, dog, fox], dog: [cat]}

如何在UILabel和Textfields上使用它:

import UIKit

extension UIView{
    enum GlowEffect:Float{
        case small = 0.4, normal = 1, big = 5
    }

    func doGlowAnimation(withColor color:UIColor, withEffect effect:GlowEffect = .normal) {
        layer.masksToBounds = false
        layer.shadowColor = color.cgColor
        layer.shadowRadius = 0
        layer.shadowOpacity = effect.rawValue
        layer.shadowOffset = .zero

        let glowAnimation = CABasicAnimation(keyPath: "shadowRadius")
        glowAnimation.fromValue = 0
        glowAnimation.toValue = 1
        glowAnimation.beginTime = CACurrentMediaTime()+0.3
        glowAnimation.duration = CFTimeInterval(0.3)
        glowAnimation.fillMode = kCAFillModeRemoved
        glowAnimation.autoreverses = true
        glowAnimation.isRemovedOnCompletion = true
        layer.add(glowAnimation, forKey: "shadowGlowingAnimation")
    }
}