2016-06-29 8 views
-1

UIViewは、UIViewControllerの背景にグラデーションとして機能します。グラデーションコードはUIViewdrawRectです(下記参照)。そのグラディエントビューは、自動レイアウト(以下に示す制約)のあるUIViewControllerビューに接続されています。回転中の一貫した勾配を維持する

グラデーションはポートレートとランドスケープの両方で正しく表示されますが、の間には回転があり、白い背景が非常にはっきりと見えます(表示がコーナーで回転しているため)。

質問:回転中にどのように勾配を維持できますか?

グラデーションコード(私のサブクラス化UIView中):問題は、この勾配にあなたの全体的なアプローチが間違っているということです

let gView = GradientView() 
    self.view.addSubview(gView) 
    gView.translatesAutoresizingMaskIntoConstraints = false 
    let gvCX = NSLayoutConstraint(item: gView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1.0, constant: 0.0) 
    let gvCY = NSLayoutConstraint(item: gView, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1.0, constant: 0.0) 
    let gcH = NSLayoutConstraint(item: gView, attribute: .Height, relatedBy: .Equal, toItem: self.view, attribute: .Height, multiplier: 1.0, constant: 0.0) 
    let gcW = NSLayoutConstraint(item: gView, attribute: .Width, relatedBy: .Equal, toItem: self.view, attribute: .Width, multiplier: 1.0, constant: 0.0) 
    NSLayoutConstraint.activateConstraints([gvCX, gvCY, gvH, vW]) 

答えて

-1

override func drawRect(rect: CGRect) { 
    gradient.frame = self.bounds 
    gradient.opacity = 0.5 
    gradient.colors = colors 
    self.layer.insertSublayer(gradient, atIndex: 0) 
} 

制約コード(UIViewControllerviewDidLoadに) 。

  • グラデーションをレイヤーとして追加しています。ビューのサイズを変更すると、レイヤーのサイズが自動的に変更されません。しかし、ビューは回転後にサイズが変更されたです。それは回転がすべてについてです。

  • drawRect:にレイヤーを追加しています。これは狂気です。なぜなら、それは多くの、何度も呼ばれているので、drawRect:がやろうとしているものではないからです。勾配画像を表示UIImageViewを

代わりに、一度UIImage、に勾配を描き、そしてだけであるself.viewを有する(または含有)。その勾配は他のすべてと一緒に回転し、すべてがうまくいくでしょう。

関連する問題