2

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

我有几个动画(它们一次只发生一个,没有什么花哨或复杂的)。这些动画就像改变 UIView 的 alpha 和 scale 值。

它们非常光滑!但是,当使用 Quartz Core 向屏幕上的文本添加发光时,其余动画不再那么流畅。

在我父亲的 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;

谢谢!

4

2 回答 2

0

确保你设置一个shadowPath这样的

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

参考:关于设置shadowPath的重要性

于 2013-08-12T00:03:45.017 回答
0

斯威夫特 4

发光的动画几乎没有性能影响。假设你有一个 UILabel 或 UITextField 保存你的文本。

1-使用动画创建 UIView 扩展

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

UIView 扩展

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")
    }
}

如何在 UILabels 和 Textfields 上使用它:

//TextField with border
textField.doGlowAnimation(withColor: UIColor.red, withEffect: .big)

//Label
label.doGlowAnimation(withColor: label.textColor, withEffect: .small)
于 2018-06-06T11:50:23.220 回答