web-dev-qa-db-ja.com

Swiftでラベルにドロップシャドウ効果を作成する方法は?

ラベルにドロップシャドウをコーディングする方法がわかりません。スコアラベルが変更されているので、シャドウ付きのテキストをフォトショッピングすることはできません。常にテキストの後ろに自動的にぼやけた影が付くようにコーディングする必要があります。誰かがいくつかの例や助けを提供できますか?


これは複製であると言う人々、「複製」はUIViewのドロップシャドウに関するもので、私のものはUILabelに関するものです。それは同じものではありません。

23
Rasmus Rossen

これを試してみてください-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

55
DonMag

UILabelには、影を変更するためのプロパティがあります。下の画像は、属性インスペクターのプロパティと結果を示しています。

enter image description here

ラベルに対するその効果の結果 enter image description here

15
Maulik Pandya

extensionを記述して使用できます。クラスViewControllerの拡張コードoutsideを配置します。

私は微妙な影が好きです。
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()
11
deepakssn

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)
2
deepakssn

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
            }
        }
    }
}
2
Pramod More

正常に動作しますが、テキストではなく、すべてのラベルに影を追加します。

この場合:

クラス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

note:シャドウはラベルではなく文字列の属性であるため、毎回属性付きの文字列を追加する必要があります。そうでない場合は、クラスを派生して「setText」 。 (init/setterで設定できるプロパティでオブジェクト内の属性を保持)

0
ingconti