Actualmente estoy necesitando tener un UIPageControl haciendo uso del UIScrollView para poder tener un efecto de carrosuel
Mi problema es que las UIView no quedan centradas cada una un ejemplo mas practico
Se me queda parte de la segunda vista como parte de la primera
Mis clases son :
class InitialViewController: CommonViewController, UIScrollViewDelegate{ @IBOutlet weak var pageControl: UIPageControl! @IBOutlet weak var scrollView: UIScrollView!{ didSet{ scrollView.delegate = self } } var presenter = InitialPresenter() var slides:[Slide] = []; override func viewDidLoad() { super.viewDidLoad() self.slides = createSlides() self.setupSlideScrollView(slides: slides) self.pageControl.numberOfPages = slides.count self.pageControl.currentPage = 0 self.view.bringSubview(toFront: pageControl) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.presenter.wfm = WorkflowManager.init(navigationController: self.navigationController) } func createSlides() -> [Slide] { let slide1:Slide = Bundle.main.loadNibNamed("ViewSlide", owner: self, options: nil)?.first as! Slide slide1.imgCenterSlide.image = UIImage(named: "icono_transferencia_carrusel") slide1.strLblTitle.text = NSLocalizedString("strLblTitleSlideOne_INTIAL",comment:"") slide1.strLblSubTitle.text = NSLocalizedString("strLblSubTitleSlideOne_INTIAL",comment:"") let slide2:Slide = Bundle.main.loadNibNamed("ViewSlide", owner: self, options: nil)?.first as! Slide slide2.imgCenterSlide.image = UIImage(named: "icono_pago_carrusel") slide2.strLblTitle.text = NSLocalizedString("strLblTitleSlideTwo_INTIAL",comment:"") slide2.strLblSubTitle.text = NSLocalizedString("strLblSubTitleSlideTwo_INTIAL",comment:"") let slide3:Slide = Bundle.main.loadNibNamed("ViewSlide", owner: self, options: nil)?.first as! Slide slide3.imgCenterSlide.image = UIImage(named: "icono_consulta_carrusel") slide3.strLblTitle.text = NSLocalizedString("strLblTitleSlideTree_INTIAL",comment:"") slide3.strLblSubTitle.text = NSLocalizedString("strLblSubTitleSlideTree_INTIAL",comment:"") let slide4:Slide = Bundle.main.loadNibNamed("ViewSlide", owner: self, options: nil)?.first as! Slide slide4.imgCenterSlide.image = UIImage(named: "icono_simulador_carrusel") slide4.strLblTitle.text = NSLocalizedString("strLblTitleSlideFour_INTIAL",comment:"") slide4.strLblSubTitle.text = NSLocalizedString("strLblSubTitleSlideFour_INTIAL",comment:"") slide1.strLblTitle.textColor = Utils.Color.BlueLabelText slide1.strLblSubTitle.textColor = Utils.Color.BlueLabelText slide2.strLblTitle.textColor = Utils.Color.BlueLabelText slide2.strLblSubTitle.textColor = Utils.Color.BlueLabelText slide3.strLblTitle.textColor = Utils.Color.BlueLabelText slide3.strLblSubTitle.textColor = Utils.Color.BlueLabelText slide4.strLblTitle.textColor = Utils.Color.BlueLabelText slide4.strLblSubTitle.textColor = Utils.Color.BlueLabelText return [slide1, slide2, slide3, slide4] } func setupSlideScrollView(slides : [Slide]) { scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height) scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(slides.count), height: view.frame.height) scrollView.isPagingEnabled = true 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) scrollView.addSubview(slides[i]) } } /* * default function called when view is scolled. In order to enable callback * when scrollview is scrolled, the below code needs to be called: * slideScrollView.delegate = self or */ func scrollViewDidScroll(_ scrollView: UIScrollView) { let pageIndex = round(scrollView.contentOffset.x/view.frame.width) pageControl.currentPage = Int(pageIndex) let maximumHorizontalOffset: CGFloat = scrollView.contentSize.width - scrollView.frame.width let currentHorizontalOffset: CGFloat = scrollView.contentOffset.x // vertical let maximumVerticalOffset: CGFloat = scrollView.contentSize.height - scrollView.frame.height let currentVerticalOffset: CGFloat = scrollView.contentOffset.y let percentageHorizontalOffset: CGFloat = currentHorizontalOffset / maximumHorizontalOffset let percentageVerticalOffset: CGFloat = currentVerticalOffset / maximumVerticalOffset /* * below code changes the background color of view on paging the scrollview */ // self.scrollView(scrollView, didScrollToPercentageOffset: percentageHorizontalOffset) /* * below code scales the imageview on paging the scrollview */ let percentOffset: CGPoint = CGPoint(x: percentageHorizontalOffset, y: percentageVerticalOffset) } func scrollView(_ scrollView: UIScrollView, didScrollToPercentageOffset percentageHorizontalOffset: CGFloat) { if(pageControl.currentPage == 0) { //Change background color to toRed: 103/255, fromGreen: 58/255, fromBlue: 183/255, fromAlpha: 1 //Change pageControl selected color to toRed: 103/255, toGreen: 58/255, toBlue: 183/255, fromAlpha: 0.2 //Change pageControl unselected color to toRed: 255/255, toGreen: 255/255, toBlue: 255/255, fromAlpha: 1 pageControl.pageIndicatorTintColor = Utils.Color.BlueLabelText slides[pageControl.currentPage].backgroundColor = Utils.Color.LigthViewBackGround let pageSelectedColor: UIColor = fade(fromRed: 81/255, fromGreen: 36/255, fromBlue: 152/255, fromAlpha: 1, toRed: 103/255, toGreen: 58/255, toBlue: 183/255, toAlpha: 1, withPercentage: percentageHorizontalOffset * 3) pageControl.currentPageIndicatorTintColor = Utils.Color.BlueLabelText } } func fade(fromRed: CGFloat, fromGreen: CGFloat, fromBlue: CGFloat, fromAlpha: CGFloat, toRed: CGFloat, toGreen: CGFloat, toBlue: CGFloat, toAlpha: CGFloat, withPercentage percentage: CGFloat) -> UIColor { let red: CGFloat = (toRed - fromRed) * percentage + fromRed let green: CGFloat = (toGreen - fromGreen) * percentage + fromGreen let blue: CGFloat = (toBlue - fromBlue) * percentage + fromBlue let alpha: CGFloat = (toAlpha - fromAlpha) * percentage + fromAlpha // return the fade colour return UIColor(red: red, green: green, blue: blue, alpha: alpha) }
}
Mi clase Slide es la siguiente
class Slide: UIView { @IBOutlet weak var strLblTitle: UITextView! @IBOutlet weak var imgCenterSlide: UIImageView! @IBOutlet weak var strLblSubTitle: UITextView! @IBOutlet weak var viewBackGround: UIView!
}
y mis contrainsts son
Desde ya cualquuier ayuda es bienvenida no entiendo porque no puede quedar cada view centrado