サブクラス化されたNavigationControllerの背景にグラデーションを設定しようとしています。同じコードに色を追加するとうまくいきますが、グラデーションを表示させることができません。私はバックグラウンドビューとしてCAGradientLayerを返すUIViewのサブクラスを作成しました。ここでバックグラウンドのグラデーションビューが顧客にロードされない理由UINavigationControllerクラス
は私のサブクラスUIViewのである:(
@IBDesignable
class GenericBackgrounView: UIView {
override class var layerClass: AnyClass {
return CAGradientLayer.self
}
///The roundness for the corner
@IBInspectable var cornerRadius: CGFloat = 0.0 {
didSet{
setupGradient()
}
}
func setupGradient() {
//let gradientColors = [bgDarkColor.cgColor, bgDarkColor.blended(withFraction: 0.5, of: bgLightColor).cgColor, bgLightColor.cgColor]
let gradientColors = [UIColor.brown.cgColor, UIColor.red.blended(withFraction: 0.5, of: UIColor.cyan).cgColor, UIColor.yellow.cgColor]
gradientLayer.colors = gradientColors
gradientLayer.locations = ESDefault.backgroundGradientColorLocations
setNeedsDisplay()
}
var gradientLayer: CAGradientLayer {
return self.layer as! CAGradientLayer
}
override func awakeFromNib() {
super.awakeFromNib()
setupGradient()
}
override func prepareForInterfaceBuilder() {
setupGradient()
}
}
奇妙されているので、私はその積載右グラデーション確信している色に注意してください。そして、ここに私UINavigationControllerです。 クラスGenericNavigationController:UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
let backView = GenericBackgrounView(frame: self.view.frame)
backView.bounds = self.view.bounds
self.view.backgroundColor = UIColor.clear
self.view.addSubview(backView)
self.view.sendSubview(toBack: backView)
// Do any additional setup after loading the view.
}
}
は、
また、私がGenericBackgroundViewをインターフェイスビルダーに追加したビューに使用すると、正常に動作することに注意してください。
私はこれを長く続けてきました。私はAppleに、コードとInterface Builderの両方で何らかの種類のTheming APIをセットアップすることを提案していると思います...そしてInterface Builderに直接グラデーションを追加する機能...
ありがとうございました。
ブレンドされた(withFraction:0.5、of:UIColor)関数を最小化しないでください。これは、UIColorの拡張であり、係数付きブレンドカラーを作成したものです。 –
'viewDidLoad'は、viewControllerの' view'のランタイム 'frame'をキャプチャするには時期尚早です。ビューが画面上に表示された後に、デバッガでグラデーションビューのフレームを印刷しようとしましたか?それはおそらくそれがスクリーン上にない理由を伝えるでしょう。 – creeperspeak
私はデバッガについて十分に分かっていないかもしれないと思います。 –