ios 如何在 Swift 中的标签上制作阴影效果?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/45062569/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to make a drop shadow effect on a label in Swift?
提问by Rasmus Rossen
I can't figure out how to code a drop shadow on a label. I have a score label that changes so just photoshopping text with shadows wont be possible. I need to code it so it automatically has a blurry shadow behind the text at all times. Can anyone come with some examples or help?
我不知道如何在标签上编码阴影。我有一个会更改的分数标签,因此无法仅使用带有阴影的 photoshopping 文本。我需要对其进行编码,以便它始终在文本后面自动有一个模糊的阴影。任何人都可以提供一些示例或帮助吗?
People saying this is a duplicate, the "duplicate" is about drop shadows on UIView, mine is about UILabel. It's not the same thing.
人们说这是重复的,“重复”是关于 UIView 上的阴影,我的是关于 UILabel。这不是一回事。
回答by DonMag
Give this a try - you can run it directly in a Playground page:
试试这个——你可以直接在 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
Play around with different values for the shadow Color, Opacity, Radius and Offset
使用不同的阴影颜色、不透明度、半径和偏移值
Result:
结果:
回答by Maulik Pandya
回答by deepakssn
You can write an extensionand use it. Place the extension code outsideof class ViewController.
您可以编写一个扩展并使用它。将扩展代码放在类 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
}
}
On your label simply call this method
在您的标签上只需调用此方法
myLabel.textDropShadow()
回答by Pramod More
Swift 4,IBInspectable using extension
Swift 4,IBInspectable 使用扩展
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
}
}
}
}
回答by deepakssn
Swift 4 - Extension with shadow parameters:
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
}
}
On your label simply call this method
在您的标签上只需调用此方法
let titleColor = UIColor(red:0.08, green:0.08, blue:0.08, alpha:1.0)
titleLbl.lblShadow(color: titleColor, radius: 3, opacity: 0.25)
回答by ingconti
works fine but add shadow to ALL label, not to text.
工作正常,但为所有标签添加阴影,而不是文本。
in this case:
在这种情况下:
class ViewController: UIViewController {
类视图控制器: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
}
}
}
You will get:
你会得到:
note:You must add attributed string every time, as shadow is an attribute of string, not label, otherwise you can also derive class and override "setText". (keeping attributes inside the object in a a property you can set on init/setter)
注意:每次都必须添加属性字符串,因为shadow是字符串的属性,而不是标签,否则您也可以派生类并覆盖“setText”。(将属性保留在对象内的 aa 属性中,您可以在 init/setter 上设置)