2016-06-17 17 views
0

つまり、私はダークブルーとブラックのミックスであるグラデーションを持っています。グラデーションは美しく見えますが、画面を回転させて風景にすると、2つの色が分割され、画面の半分が青い背景になり、残りの半分が黒になります。これは私のコードであるスイフト:回転によるグラデーションの分割

YouTubeの動画https://www.youtube.com/watch?v=pabNgxzEaRk

サイトhttp://blog.apoorvmote.com/gradient-background-uiview-ios-swift/

let topColor = UIColor(red: 28/255.0, green: 25/255.0, blue: 127/255.0, alpha: 1) 
    let bottomColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 25/255.0, alpha: 1) 

    let gradientColors: [CGColor] = [topColor.CGColor, bottomColor.CGColor] 
    let gradientLocations: [Float] = [0.0, 1.0] 

    let gradientLayer: CAGradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations 

    gradientLayer.frame = self.view.bounds 
    self.view.layer.insertSublayer(gradientLayer, atIndex: 0) 

誰かが私を指すことができ、私は右のそれをしなかった考え出す、私はこれらの二つのソースからのコードをコピー私の勾配を2つに分割するのを止める正しい方向に?

答えて

0

画面の向きを変更すると、すべてのビューの境界も同様に変更されます(自動レイアウトを使用していると仮定して)が、プログラムで追加されたレイヤーには同じことが適用されません。したがって、あなたのケースでは、グラデーションレイヤーには回転前に古いビューの境界に基づいて設定されたフレームが残っています。これを解決するには、各ビューの境界変更で呼び出されるlayoutSubviews関数のグラデーションビューのサブクラス化とグラデーションレイヤフレームの更新をお勧めします。

class GradientView: UIView { 

    let gradientLayer = CAGradientLayer() 

    override func awakeFromNib() { 
     gradientLayer.frame = self.bounds 
     gradientLayer.colors = yourColors 
     gradientLayer.locations = yourLocations 
     self.layer.addSublayer(gradientLayer) 
    } 

    override func layoutSubviews() { 
     gradientLayer.frame = self.bounds 
    } 
} 
1

あなただけの私がこれとその作業罰金をしようとしただけで、あなたのデバイスのビュー

書き込み、

override func viewDidLayoutSubviews() { 
    gradientLayer.frame = self.view.bounds 
} 

に対するあなたのグラデーション表示を自動サイズ変更するlayoutSubviewメソッドをオーバーライドする必要があります。これがあなたのお役に立てば幸いです。

関連する問題