Search code examples
iosswiftuiscrollviewuiimageviewuipagecontrol

Add imageview to a scrollview page control


My code below is a basic scrollview using page control which uses basic colors on each screen. I want to display an imageview over the uiview which displays the basic colors. I want to call var pics from the asset file in Xcode.

var colors:[UIColor] = [UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow]
var pics = ["a","b","c","d"]

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.addSubview(scrollView)
    for index in 0..<4 {
        frame.origin.x = self.scrollView.frame.size.width * CGFloat(index)
        frame.size = self.scrollView.frame.size

        let subView = UIView(frame: frame)
        subView.backgroundColor = colors[index]
        self.scrollView .addSubview(subView)
    }

    func configurePageControl() {
        self.pageControl.numberOfPages = colors.count
    }

Solution

  • Here I suppose that you have 4 images attached in your project named 0,1,2,3 png , try this

    import UIKit
    
    class ViewController: UIViewController , UIScrollViewDelegate {
    
        let scrollView = UIScrollView()
    
        let pageCon = UIPageControl()
    
        override func viewDidLoad() {
    
            super.viewDidLoad()
    
            let viewsCount = 4
    
            var prevView = self.view!
    
            scrollView.delegate = self
    
            scrollView.isPagingEnabled = true
    
            pageCon.numberOfPages = viewsCount
    
            pageCon.currentPage = 0
    
            pageCon.tintColor = .green
    
            pageCon.currentPageIndicatorTintColor = .orange
    
            pageCon.backgroundColor = .blue
    
            pageCon.translatesAutoresizingMaskIntoConstraints = false
    
            scrollView.translatesAutoresizingMaskIntoConstraints = false
    
            view.addSubview(scrollView)
    
            view.insertSubview(pageCon, aboveSubview: scrollView)
    
            NSLayoutConstraint.activate([
    
                scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
                 scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
                 scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant:20),
                 scrollView.heightAnchor.constraint(equalToConstant: 400),
                 pageCon.centerXAnchor.constraint(equalTo: view.centerXAnchor),
                 pageCon.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant:-20),
    
                ])
    
            for i in 0..<viewsCount {
    
                let imageV = UIImageView()
                imageV.image = UIImage(named: "\(i).png")
                imageV.translatesAutoresizingMaskIntoConstraints = false
    
                scrollView.addSubview(imageV)
    
                if prevView == self.view {
    
                    imageV.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
                }
                else {
    
                       imageV.leadingAnchor.constraint(equalTo: prevView.trailingAnchor).isActive = true
                }
    
                NSLayoutConstraint.activate([
    
                    imageV.topAnchor.constraint(equalTo: scrollView.topAnchor),
                    imageV.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
                    imageV.widthAnchor.constraint(equalToConstant: self.view.frame.width),
                    imageV.heightAnchor.constraint(equalToConstant: 400)
                    ])
    
                if i == viewsCount - 1 {
    
                    imageV.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
                }
    
                prevView = imageV
    
    
                }
    
        }
    
    
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
    
            pageCon.currentPage = Int(scrollView.contentOffset.x / self.view.frame.width)
    
        }
    
    }