如何获取视图的帧并将其设置为渐变的帧

时间:2017-04-16 13:40:21

标签: ios swift

所有我都有一个带有一些指定锚点的页面控件,如下所示。我想在其背景中应用渐变。但是我无法获得页面控件的实际帧。任何人都可以帮助我。

这是页面控件的框架,工作正常。

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来获取页面控件的框架来获取框架宽度和高度。

1 个答案:

答案 0 :(得分:1)

您可能在为视图指定框架并在屏幕上布局之前添加渐变。尝试在viewDidLayoutSubviews()方法中添加渐变。