すべて以下のように、指定したアンカーを持つページコントロールがあります。背景にグラデーションを適用したい。しかし、私はページコントロールの実際のフレームを取得することができません。誰でも助けてくれますか?ビューのフレームを取得してグラデーションのフレームに設定する方法
これは正常に動作しているページコントロールのフレームです。
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のように呼び出してフレームの幅と高さを取得することで、ページコントロールのフレームを取得する方法はありますか?
ここで 'addGradientForPageControl'を呼び出していますか?おそらく、pageControlのフレームが設定される前に実行されているかもしれません。 – nathan
レイヤーはビューと共に自動サイズ変更されません。ビューのサイズが変更されると、レイヤーのサイズを手動で変更する必要があります。 – DonMag