视图控制器

PageController ViewController控制器

创建一个新的项目:Create a new Xcode project->Single View Application

视图控制器_第1张图片

在项目上面右键->new file,创建3个视图控制器类文件

视图控制器_第2张图片

视图控制器_第3张图片

视图控制器_第4张图片

视图控制器_第5张图片

创建完成了第一个视图控制器类文件,重复以上步骤创建第二个,第三个视图控制器类文件。类名为:FirstSubViewController,SecondSubViewController.

接下来为每一个视图控制器的根视图,设置背景色。

选择第一个视图控制器文件:FirstSubViewController

override func viewDidLoad() {
        super.viewDidLoad()

        //设置背景色
        self.view.backgroundColor = UIColor.brownColor()
    }

选择第二个视图控制器文件:SecondSubViewController

override func viewDidLoad() {
        super.viewDidLoad()

        //设置背景色.
        self.view.backgroundColor = UIColor.purpleColor()
    }

打开另一个视图控制器文件:PageControlViewController.swift

    override func viewDidLoad() {
        super.viewDidLoad()

        //获取当前设备的屏幕尺寸信息
        var screenFrame = UIScreen.mainScreen().bounds
        //获取屏幕高度和宽度
        let screenWidth = screenFrame.size.width
        let screenHeight = screenFrame.size.height
        
        //创建一个区域来显示之前创建的视图控制器
        scrollView.frame = screenFrame
        //设置滚动视图为分页模式,即每滚动一次就是一页
        scrollView.pagingEnabled = true
        //设置滚动视图的尺寸信息,这里有两个页面,所以将滚动视图的宽度,设置为两倍页面宽度
        scrollView.contentSize = CGSizeMake(screenWidth*2, screenHeight*2)
        scrollView.backgroundColor = UIColor.blackColor()//背景色
        scrollView.delegate = self//设置滚动视图对象的代理为当前类,这样就可以再当前文件中,编写代理方法,以捕捉滚动视图的相关动作
        
        //页面控制器对象的高度
        let pcHeight:CGFloat = 50.0
        //创建一个区域,显示页面控制器对象
        let pcRect = CGRectMake(0, screenHeight - pcHeight, screenWidth, pcHeight)
        
        //设置页面控制器对象的显示区域
        pageControl.frame = pcRect
        //设置页面控制器对象的总页数为两页
        pageControl.numberOfPages = 2
        //设置页面控制器对象的当前页编号
        pageControl.currentPage = 0
        //设置页面控制器兑现过的背景颜色
        pageControl.backgroundColor = UIColor.grayColor()
        //给页面控制器对象添加监听切换事件的方法
        pageControl.addTarget(self , action: "pageControlDidChanged", forControlEvents: UIControlEvents.ValueChanged)
        
        //创建第一个视图控制器对象的实例
        let firstController = FirstSubViewController()
        screenFrame.origin.y = 0//坐标原点的纵向值为0
        //设置第一个视图控制器对象的显示区域
        firstController.view.frame = screenFrame
        
        //创建第二个视图控制器对象的实例
        let secondController = SecondSubViewController()
        screenFrame.origin.x = screenFrame.size.width //显示在屏幕之外
        secondController.view.frame = screenFrame
        
        scrollView.addSubview(firstController.view)
        scrollView.addSubview(secondController.view)
        
        self.view.addSubview(scrollView)
        self.view.addSubview(pageControl)
    }
    
    func pageControlDidChanges(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
    }

 

然后打开应用代理文件AppDelegate.swift

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        //在应用启动完成的代理方法中创建程序的入口
        let vc=PageControlViewController()//滚动视图控制器实例
        // 把滚动视图控制器的实例作为当前窗口的根视图控制器
        self.window?.rootViewController = vc
        return true
    }

运行:

视图控制器_第6张图片 

你可能感兴趣的:(视图控制器)