2017-04-16 15 views
0

すべて以下のように、指定したアンカーを持つページコントロールがあります。背景にグラデーションを適用したい。しかし、私はページコントロールの実際のフレームを取得することができません。誰でも助けてくれますか?ビューのフレームを取得してグラデーションのフレームに設定する方法

これは正常に動作しているページコントロールのフレームです。

pageControl.setAnchor(top: nil, bottom: buttonsContainerView.topAnchor, left: view.leftAnchor, right: view.rightAnchor); 
     pageControl.heightAnchor.constraint(equalToConstant: 30).isActive = true; 

ページコントロールにグラデーションを適用するコール関数。

addGradientForPageControl(view: pageControl); 

ページ制御コード

lazy var pageControl: UIPageControl = { 
     let pc = UIPageControl(); 
     pc.pageIndicatorTintColor = UIColor.black; 
     pc.currentPageIndicatorTintColor = UIColor.white; 
     pc.numberOfPages = self.pages.count; 
     pc.translatesAutoresizingMaskIntoConstraints = false; 
     pc.addTarget(self, action: #selector(handlePageClick), for: .touchUpInside); 
     return pc; 
    }(); 

グラデーション機能。

func addGradientForPageControl(view: UIView){ 
     let gradient: CAGradientLayer = CAGradientLayer(); 
     gradient.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height); 
     print(Int(view.layer.borderWidth)); 
     let topColor = UIColor(red: 107/255, green: 143/255, blue: 133/255, alpha: 1).cgColor; 
     let bottomColor = UIColor(red: 68/255, green: 126/255, blue: 114/255, alpha: 1).cgColor; 
     gradient.colors = [topColor, bottomColor]; 
     view.layer.addSublayer(gradient); 
    } 

上記の関数を呼び出すと、常にグラジェントのフレームが(0,0,0,0)になります。これは背景に勾配を生じさせない。 view.widthAnchor.somethingのように呼び出してフレームの幅と高さを取得することで、ページコントロールのフレームを取得する方法はありますか?

+0

ここで 'addGradientForPageControl'を呼び出していますか?おそらく、pageControlのフレームが設定される前に実行されているかもしれません。 – nathan

+0

レイヤーはビューと共に自動サイズ変更されません。ビューのサイズが変更されると、レイヤーのサイズを手動で変更する必要があります。 – DonMag

答えて

1

ビューにフレームが割り当てられ、画面にレイアウトされる前に、おそらくグラデーションが追加されています。 viewDidLayoutSubviews()メソッドでグラデーションを追加してみてください。

+0

うまく働いてくれてありがとう – Bikram

関連する問題