web-dev-qa-db-fra.com

Comment créer un effet d'ombre portée sur une étiquette dans Swift?

Je n'arrive pas à comprendre comment coder une ombre portée sur une étiquette. J'ai une étiquette de partition qui change, il ne sera donc plus possible d'utiliser du texte photoshopping avec des ombres. J'ai besoin de le coder pour qu'il ait automatiquement une ombre floue derrière le texte à tout moment. Quelqu'un peut-il venir avec des exemples ou de l'aide?


Les gens disent que c'est un doublon, le "duplicata" concerne les ombres portées sur UIView, le mien concerne UILabel. Ce n'est pas la même chose.

15
Rasmus Rossen

Essayez ceci - vous pouvez le lancer directement dans une page de 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

Jouez avec différentes valeurs pour les couleurs d'ombre, d'opacité, de rayon et de décalage

Résultat:

 enter image description here

44
DonMag

Vous pouvez écrire une extension et l'utiliser. Placez le code d'extension extérieur de la classe ViewController.

J'aime les ombres subtiles.
 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
    }
}

Sur votre étiquette, appelez simplement cette méthode

myLabel.textDropShadow()
9
deepakssn

UILabel a une propriété pour changer son ombre, l'image ci-dessous montre la propriété dans l'inspecteur d'attributs et le résultat. 

 enter image description here

Résultat de cet effet sur l'étiquette  enter image description here

7
Maddyヅヅ

Swift 4 - Extension avec paramètres d'ombre:

 // 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
        }
    }

Sur votre étiquette, appelez simplement cette méthode

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

Swift 4, IBInspectable avec extension 

extension UILabel {

    @IBInspectable var isShadowOnText: Bool {
        get {
            return self.isShadowOnText
        }
        set {
            guard (newValue as? Bool) != nil else {
                return
            }

            if newValue == true{

                self.layer.shadowColor = UIColor.black.cgColor
                self.layer.shadowRadius = 2.0
                self.layer.shadowOpacity = 1.0
                self.layer.shadowOffset = CGSize(width: 2, height: 2)
                self.layer.masksToBounds = false
            }
        }
    }
}
2
Pramod More