2017-05-24 5 views
1

私はUIViewにグラデーションレイヤーを適用するためにUIView拡張機能を使用しています。私はランタイムにグラデーションの色を変更する必要があります。私は、scrollview contentoffset値を使ってグラデーションの色を更新します。 私はスーパーレイヤからレイヤを削除し、新しい色を持つ新しいgradientlayerを作成しようとしました:私が試した何iOS swiftで実行時にCAGradientLayerの色を更新するには?

。しかし、アプリはメモリの問題を抱えており、UIは時々凍っています。

実行時にCAGradientLayerのグラデーションカラーを更新することはできますか?

extension UIView { 
    func applyGradient(withColours colours: [UIColor], gradientOrientation orientation: GradientOrientation) { 
     let gradient: CAGradientLayer = CAGradientLayer() 
     gradient.frame = self.bounds 
     gradient.colors = colours.map { $0.cgColor } 
     gradient.startPoint = orientation.startPoint 
     gradient.endPoint = orientation.endPoint 
     self.layer.insertSublayer(gradient, at: 0) 
    } 
} 
+1

プロパティに勾配層を保持し、その色のプロパティを更新します。 – Alistra

+0

はい。 @Alistraを動かしているようだ。ありがとう – abhi1992

答えて

1

これを試してみてください。それは助けを願って...

let view = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 50)) 
let gradient = CAGradientLayer() 

gradient.frame = view.bounds 
gradient.colors = [UIColor.white.cgColor, UIColor.black.cgColor] 

view.layer.insertSublayer(gradient, at: 0) 

乾杯

2

はこの質問への答えは同じスコープ内からグラデーションレイヤーの色のプロパティを変更することです。私は以前これをやってみましたが、別のスコープからやってみました。今はうまくいきます。答えは以下の通りです。

スイフト3.1コード:

let gradient = CAGradientLayer() 

gradient.frame = view.bounds 
gradient.colors = [UIColor.white.cgColor, UIColor.black.cgColor] 
gradient.startPoint = CGPoint(x: 0, y: 0) 
gradient.endPoint = CGPoint(x: 1, y: 1) 
view.layer.insertSublayer(gradient, at: 0) 

DispatchQueue.main.asyncAfter(deadline: .now() + 10) { 
// this will be called after 10 seconds. 
    gradient.colors = [UIColor.red.cgColor, UIColor.black.cgColor] 
} 
関連する問題