2017-07-25 11 views
2

ストロークとシャドウを使用すると、何らかの二重ストロークが発生します。これをどうすれば解決できますか?NSAttributedString iOSのシャドウとストローク?

遊び場コード:

import UIKit 

var shadow = NSShadow() 
shadow.shadowColor = UIColor.black 
shadow.shadowOffset = CGSize(width: 0, height: 3) 

class CustomLabel: UILabel { 
    override func drawText(in rect: CGRect) { 
     let attributes: [String: Any] = [NSStrokeWidthAttributeName: -2.0, 
          NSStrokeColorAttributeName: UIColor.black, 
          NSForegroundColorAttributeName: UIColor.white, 
          NSShadowAttributeName: shadow, 
          NSFontAttributeName: UIFont(name: "AvenirNext-Bold", size: 50)] 
     self.attributedText = NSAttributedString(string: self.text ?? "", attributes: attributes) 
     super.drawText(in: rect) 
    } 
} 

let label = CustomLabel(frame: CGRect(x: 0, y: 0, width: 200, height: 100)) 
label.backgroundColor = UIColor.orange 
label.text = "Hello" 

結果:

enter image description here

答えて

1

私はそれを考え出しました。私はラベルのCALayerのに影を適用すると、背景色を無効にした場合、それが期待どおりに動作:

import UIKit 

class CustomLabel: UILabel { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.layer.shadowColor = UIColor.black.cgColor 
     self.layer.shadowOffset = CGSize(width: 0, height: 3) 
     self.layer.shadowOpacity = 1.0 
     self.layer.shadowRadius = 0.0 
    } 

    override func drawText(in rect: CGRect) { 
     let attributes: [String: Any] = [NSStrokeWidthAttributeName: -2.0, 
             NSStrokeColorAttributeName: UIColor.black, 
             NSForegroundColorAttributeName: UIColor.white, 
             NSFontAttributeName: UIFont(name: "AvenirNext-Bold", size: 50)] 
     self.attributedText = NSAttributedString(string: self.text ?? "", attributes: attributes) 
     super.drawText(in: rect) 
    } 
} 

let label = CustomLabel(frame: CGRect(x: 0, y: 0, width: 200, height: 100)) 
label.text = "Hello" 

enter image description here

関連する問題