Xcode视图控制器和滚动视图swift代码PageControlViewController

//

//  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.

    }

    */


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值