How to create a Scroll View with a page control using swift? [closed]
import UIKitclass DummyVC: UIViewController, UIScrollViewDelegate { let scrollView = UIScrollView(frame: CGRect(x:0, y:0, width:320,height: 300)) var colors:[UIColor] = [UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow] var frame: CGRect = CGRect(x:0, y:0, width:0, height:0) var pageControl : UIPageControl = UIPageControl(frame: CGRect(x:50,y: 300, width:200, height:50)) override func viewDidLoad() { super.viewDidLoad() configurePageControl() scrollView.delegate = self scrollView.isPagingEnabled = true 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) } self.scrollView.contentSize = CGSize(width:self.scrollView.frame.size.width * 4,height: self.scrollView.frame.size.height) pageControl.addTarget(self, action: #selector(self.changePage(sender:)), for: UIControlEvents.valueChanged) } func configurePageControl() { // The total number of pages that are available is based on how many available colors we have. self.pageControl.numberOfPages = colors.count self.pageControl.currentPage = 0 self.pageControl.tintColor = UIColor.red self.pageControl.pageIndicatorTintColor = UIColor.black self.pageControl.currentPageIndicatorTintColor = UIColor.green self.view.addSubview(pageControl) } // MARK : TO CHANGE WHILE CLICKING ON PAGE CONTROL func changePage(sender: AnyObject) -> () { let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width scrollView.setContentOffset(CGPoint(x:x, y:0), animated: true) } func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width) pageControl.currentPage = Int(pageNumber) }}
For lazy coder this is the Swift 3 implementation based on That lazy iOS Guy 웃's answer
import UIKitclass ViewController: UIViewController,UIScrollViewDelegate { let scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 320, height: 300)) var colors:[UIColor] = [UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow] var frame: CGRect = CGRect(x: 0, y: 0, width: 0, height: 0) var pageControl : UIPageControl = UIPageControl(frame:CGRect(x: 50, y: 300, width: 200, height: 50)) override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. configurePageControl() scrollView.delegate = self 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) } self.scrollView.isPagingEnabled = true self.scrollView.contentSize = CGSize(width: self.scrollView.frame.size.width * 4, height: self.scrollView.frame.size.height) pageControl.addTarget(self, action: #selector(self.changePage(sender:)), for: UIControlEvents.valueChanged) } func configurePageControl() { // The total number of pages that are available is based on how many available colors we have. self.pageControl.numberOfPages = colors.count self.pageControl.currentPage = 0 self.pageControl.tintColor = UIColor.red self.pageControl.pageIndicatorTintColor = UIColor.black self.pageControl.currentPageIndicatorTintColor = UIColor.green self.view.addSubview(pageControl) } // MARK : TO CHANGE WHILE CLICKING ON PAGE CONTROL func changePage(sender: AnyObject) -> () { let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width scrollView.setContentOffset(CGPoint(x: x,y :0), animated: true) } func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width) pageControl.currentPage = Int(pageNumber) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
Swift 3 - Horizontal image scroll
import UIKitclass pageenabled: UIViewController,UIScrollViewDelegate { let imagelist = ["img1.jpg", "photo1.jpg", "photo3.jpg", "photo4.jpg", "photo5.jpg"] var scrollView = UIScrollView() var pageControl : UIPageControl = UIPageControl(frame:CGRect(x: 50, y: 300, width: 200, height: 50)) var yPosition:CGFloat = 0 var scrollViewContentSize:CGFloat=0; override func viewDidLoad() { super.viewDidLoad() scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 300)) configurePageControl() scrollView.delegate = self self.view.addSubview(scrollView) for i in stride(from: 0, to: imagelist.count, by: 1) { var frame = CGRect.zero frame.origin.x = self.scrollView.frame.size.width * CGFloat(i) frame.origin.y = 0 frame.size = self.scrollView.frame.size self.scrollView.isPagingEnabled = true let myImage:UIImage = UIImage(named: imagelist[i])! let myImageView:UIImageView = UIImageView() myImageView.image = myImage myImageView.contentMode = UIViewContentMode.scaleAspectFit myImageView.frame = frame scrollView.addSubview(myImageView) } self.scrollView.contentSize = CGSize(width: self.scrollView.frame.size.width * CGFloat(imagelist.count), height: self.scrollView.frame.size.height) pageControl.addTarget(self, action: Selector(("changePage:")), for: UIControlEvents.valueChanged) // Do any additional setup after loading the view. } func configurePageControl() { // The total number of pages that are available is based on how many available colors we have. self.pageControl.numberOfPages = imagelist.count self.pageControl.currentPage = 0 self.pageControl.tintColor = UIColor.red self.pageControl.pageIndicatorTintColor = UIColor.black self.pageControl.currentPageIndicatorTintColor = UIColor.green self.view.addSubview(pageControl) } // MARK : TO CHANGE WHILE CLICKING ON PAGE CONTROL func changePage(sender: AnyObject) -> () { let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width scrollView.setContentOffset(CGPoint(x: x,y :0), animated: true) } func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width) pageControl.currentPage = Int(pageNumber) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}