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.
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:
Vous pouvez écrire une extension et l'utiliser. Placez le code d'extension extérieur de la classe ViewController.
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()
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)
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
}
}
}
}