ラベルにドロップシャドウをコーディングする方法がわかりません。スコアラベルが変更されているので、シャドウ付きのテキストをフォトショッピングすることはできません。常にテキストの後ろに自動的にぼやけた影が付くようにコーディングする必要があります。誰かがいくつかの例や助けを提供できますか?
これは複製であると言う人々、「複製」はUIViewのドロップシャドウに関するもので、私のものはUILabelに関するものです。それは同じものではありません。
これを試してみてください-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
影の色、不透明度、半径、オフセットのさまざまな値で遊んでください
結果:
extensionを記述して使用できます。クラスViewControllerの拡張コードoutsideを配置します。
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()
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)
Swift 4 IBInspectable using 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
}
}
}
}
正常に動作しますが、テキストではなく、すべてのラベルに影を追加します。
この場合:
クラス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
}
}
あなたが取得します:
note:シャドウはラベルではなく文字列の属性であるため、毎回属性付きの文字列を追加する必要があります。そうでない場合は、クラスを派生して「setText」 。 (init/setterで設定できるプロパティでオブジェクト内の属性を保持)