简体   繁体   中英

UIView gradient background is not getting set

I have a UIViewController that is also a UIScrollViewDelegate The UIViewController has multiple slides that are UIViews and for each slide I want to set a different gradient background color programmatically, however it does not seem to be working as no gradient is being set.

My UIView extension

import UIKit
extension UIView {
    func addGradient(){
        let gradient = CAGradientLayer()
        gradient.frame = self.bounds
        gradient.colors = [UIColor.black, UIColor.orange]
        let backgroundIndex:UInt32 = 0;
        self.layer.insertSublayer(gradient, at: backgroundIndex)
    }
}

My FirstSlide that has it's own FirstSlide.xib

import UIKit

class FirstSlide: UIView {

}

In my WelcomeSliderViewController

import UIKit

class WelcomeSliderViewController: UIViewController, UIScrollViewDelegate{

    @IBOutlet weak var slideScrollView: UIScrollView!
    @IBOutlet weak var pagerControl: UIPageControl!

    override func viewDidLoad() {
        super.viewDidLoad()
        slideScrollView.delegate = self
        let slides = createSlides()
        setupSliderView(slides: slides)
        pagerControl.numberOfPages = slides.count
        pagerControl.currentPage = 0
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }



    @IBAction func pagerControlClicked(_ sender: Any) {
        self.slideScrollView
            .scrollRectToVisible(CGRect(
                x: Int(self.slideScrollView.frame.size.width) * self.pagerControl.currentPage,
                y: 0,
                width:Int(self.slideScrollView.frame.size.width),
                height: Int(self.slideScrollView.frame.size.height)),
                                 animated: true)
    }


    func createSlides() -> [UIView] {
        let firstSlide: FirstSlide = Bundle.main.loadNibNamed("FirstSlide", owner:self , options: nil)?.first as! FirstSlide
 let secondSlide: SecondSlide = Bundle.main.loadNibNamed("SecondSlide", owner:self , options: nil)?.first as! SecondSlide

        firstSlide.addGradient()


return [firstSlide, SecondSlide]

    }

    func setupSliderView(slides:[UIView]) {
        slideScrollView.frame = CGRect(x: 0, y:0, width: view.frame.width, height: view.frame.height)
        slideScrollView.contentSize = CGSize(width: view.frame.width * CGFloat(slides.count), height: view.frame.height)

        for i in 0 ..< slides.count{
            slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
            slideScrollView.addSubview(slides[i])
        }

    }

    func scrollViewDidEndDecelerating(_ scrollView : UIScrollView){
        let pageIndex = round(scrollView.contentOffset.x / view.frame.width)
        pagerControl.currentPage = Int(pageIndex)
    }

}

It's not working because you are passing UIColors instead of CGColors in the .colors Array of the CAGradientLayer.

It should be like this:

   func addGradient(){
    let gradient = CAGradientLayer()
    gradient.frame = self.bounds
    gradient.colors = [UIColor.black.cgColor, UIColor.orange.cgColor]
    let backgroundIndex:UInt32 = 0;
    self.layer.insertSublayer(gradient, at: backgroundIndex)
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM