//
// PageControlViewController.swift
// PageControlViewProject
//
// Created by 董黎伟 on 2018/7/7.
// Copyright © 2018年 董黎伟. All rights reserved.
//
import UIKit
class PageControlViewController: UIViewController, UIScrollViewDelegate{
// UIScrollViewDelegate 此为视图控制器添加滚动代理协议以及滚动视图属性
var scrollView = UIScrollView()
var pageControl = UIPageControl()
// 控制翻页
var isPageControlUsed = false
// 标志滑动状态
override func viewDidLoad() {
super.viewDidLoad()
var screenFrame = UIScreen.main.bounds
// 获取当前设备屏幕尺寸信息
let screenWidth = screenFrame.size.width
let screenHeight = screenFrame.size.height
// 获得屏幕尺寸的宽度值和高度值
scrollView.frame = screenFrame
// 创建一个区域来显示之前创建的视图控制器
scrollView.isPagingEnabled = true
// 设置滚动视图为分页模式,即每滚动一次就是一页
scrollView.contentSize = CGSize(width: screenWidth * 2, height: screenHeight)
// 设置滚动视图尺寸为2倍页面宽度,因为我有2个页面
scrollView.backgroundColor = UIColor.black
// 设置滚动视图背景色为黑色
scrollView.delegate = self
// 设置滚动视图对象的代理为当前类。这样就可以在当前文件中编写代理方法,以捕捉滚动视图的相关动作。
let pcHeight: CGFloat = 50.0
// 创建一个高度常量,作为页面控制器对象的高度
let pcRect = CGRect(x: 0, y: screenHeight - pcHeight, width: screenWidth, height: pcHeight)
// 创建一个区域用来显示页面控制器对象
pageControl.frame = pcRect
// 设置页面控制器对象的显示区域
pageControl.numberOfPages = 2
// 设置控制器对象的总页数为两页
pageControl.currentPage = 0
// 设置页面控制器对象的当前页编号
pageControl.backgroundColor = UIColor.gray
// 设置控制器对象的背景颜色
pageControl.addTarget(self, action: #selector(PageControlViewController.pageControlDidChanged(_ :)), for: UIControlEvents.valueChanged)
// 给页面控制器对象,添加监听页面切换事件的方法。
let firstController = FirstSubViewController()
// 创建第一个视图控制器对象的实例。
screenFrame.origin.x = 0
// 设置坐标原点的横向值为0
firstController.view.frame = screenFrame
// 设置第一个视图控制器对象的显示区域
let secondController = SecondSubViewController()
screenFrame.origin.x = screenFrame.size.width
// 设置坐标原点的x值为屏幕宽度,即第二个视图控制器对象显示在屏幕之外
secondController.view.frame = screenFrame
// 设置第二个视图控制对象的显示区域
scrollView.addSubview(firstController.view)
scrollView.addSubview(secondController.view)
// 将两个视图控制器的根视图,分别添加到滚动视图对象
self.view.addSubview(scrollView)
self.view.addSubview(pageControl)
// 把滚动视图和页面控制器对象,分别添加到当前窗口的根视图里
}
@objc func pageControlDidChanged(_ sender: AnyObject)
// 创建监听页面切换事件的方法
{
let crtPage = (CGFloat)(pageControl.currentPage)
// 获得当前页面控制器对象的当前页面
var frame = scrollView.frame
// 获得滚动视图当前的显示区域
frame.origin.x = frame.size.width * crtPage
frame.origin.y = 0
// 根据页面控制器对象的目标页码,计算滚动视图在下一页中的显示区域
scrollView.scrollRectToVisible(frame, animated: true)
// 然后滚动视图到目标区域
isPageControlUsed = true
// 设置通过 页面控制器对象切换页面
}
func scrollViewDidScroll(_ scrollView:UIScrollView)
//创建监听滚动视图的滚动事件的代理方法
{
if(!isPageControlUsed) {
// 如果是通过页面控制器对象切换页面,则不执行后面的代码
let pageWidth = scrollView.frame.size.width
// 获得滚动视图的宽度值
let page = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth)+1
// 根据滚动视图的宽度值和横向位移量,计算当前页码
pageControl.currentPage = Int(page)
// 设置页码控制器的显示页码为通过计算得到的页码
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView){
// 创建监听滚动视图的滚动减速事件的代理方法,重置标示变量的默认值。然后打开代理文件
isPageControlUsed = false
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}