如何在Swift中对标签制作阴影效果?

时间:2017-07-12 15:57:29

标签: ios swift uilabel

我无法弄清楚如何在标签上编码投影。我有一个改变的分数标签,所以只有带有阴影的photoshopping文本是不可能的。我需要对其进行编码,以便它始终在文本后面自动显示模糊的阴影。任何人都可以提供一些例子或帮助吗?

人们说这是重复的,"重复"是关于UIView的阴影,我的是关于UILabel。这不是一回事。

7 个答案:

答案 0 :(得分:47)

尝试一下 - 您可以直接在Playground页面中运行它:

import UIKit
import PlaygroundSupport

let container = UIView(frame: CGRect(x: 0, y: 0, width: 600, height: 400))

container.backgroundColor = UIColor.lightGray

PlaygroundPage.current.liveView = container

var r = CGRect(x: 40, y: 40, width: 300, height: 60)

let label = UILabel(frame: r)
label.font = UIFont.systemFont(ofSize: 44.0)
label.textColor = .white
label.frame = r
label.text = "Hello Blur"

container.addSubview(label)

label.layer.shadowColor = UIColor.black.cgColor
label.layer.shadowRadius = 3.0
label.layer.shadowOpacity = 1.0
label.layer.shadowOffset = CGSize(width: 4, height: 4)
label.layer.masksToBounds = false

使用不同的阴影颜色,不透明度,半径和偏移值

结果:

enter image description here

答案 1 :(得分:9)

UILabel有一个用于更改其阴影的属性,下面的图像显示属性检查器中的属性和结果。

enter image description here

对标签产生影响的结果 enter image description here

答案 2 :(得分:9)

您可以编写扩展程序并使用它。将扩展代码放在ViewController类的之外。

我喜欢微妙的阴影 enter image description here

extension UILabel {
    func textDropShadow() {
        self.layer.masksToBounds = false
        self.layer.shadowRadius = 2.0
        self.layer.shadowOpacity = 0.2
        self.layer.shadowOffset = CGSize(width: 1, height: 2)
    }

    static func createCustomLabel() -> UILabel {
        let label = UILabel()
        label.textDropShadow()
        return label
    }
}

在您的标签上只需调用此方法

myLabel.textDropShadow()

答案 3 :(得分:2)

Swift 4 - 带阴影参数的扩展:

 // Label Shadow
    extension UILabel {
        func lblShadow(color: UIColor , radius: CGFloat, opacity: Float){
            self.textColor = color
            self.layer.masksToBounds = false
            self.layer.shadowRadius = radius
            self.layer.shadowOpacity = opacity

            self.layer.shadowOffset = CGSize(width: 1, height: 1)
            self.layer.shouldRasterize = true
            self.layer.rasterizationScale = UIScreen.main.scale
        }
    }

在您的标签上只需调用此方法

let titleColor = UIColor(red:0.08, green:0.08, blue:0.08, alpha:1.0)
titleLbl.lblShadow(color: titleColor, radius: 3, opacity: 0.25)

答案 4 :(得分:2)

快速4 ,使用扩展名IBInspectable

<%= form_for project_message, :remote => true do |form| %>

答案 5 :(得分:0)

可以正常工作,但可以向所有标签而不是文本添加阴影。

在这种情况下:

ViewController类:UIViewController {

@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()

    let shadow = NSShadow()
    shadow.shadowColor = UIColor.blue
    shadow.shadowBlurRadius = 10

    let attrs: [NSAttributedString.Key: Any] = [
        .font: UIFont.systemFont(ofSize: 36),
        .foregroundColor: UIColor.red,
        .shadow: shadow
    ]

    let s = "MY TEXT"
    let attributedText = NSAttributedString(string: s, attributes: attrs)
    self.label.attributedText = attributedText
}

}

您将获得:

enter image description here

注意:,您必须每次添加属性字符串,因为shadow是字符串的属性,而不是标签的属性,否则,您还可以派生类并覆盖“ setText”。 (将对象内的属性保留在可以在init / setter上设置的属性中)

答案 6 :(得分:0)

U可以为所有UIView子类创建扩展方法。

extension UIView {
    func drawShadow(offset: CGSize, opacity: Float = 0.25, color: UIColor = .black, radius: CGFloat = 1) {
        layer.masksToBounds = false
        layer.shadowColor = color.cgColor
        layer.shadowOffset = offset
        layer.shadowOpacity = opacity
        layer.shadowRadius = radius
    }
}