IOS初学-视图控制器和滚动视图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21153627/article/details/83986791

视图控制器和滚动视图

首先需要创建三个视图

class FirstSubViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor=UIColor.brown;
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
	
class SecondSubViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor=UIColor.purple;
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}


//滚动视图的代理协议 UIScrollViewDelegate
class PageControlViewController: UIViewController ,UIScrollViewDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor=UIColor.purple;
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

创建完成之后我们需要在AppDelegate.swift中修改程序的入口application()


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        print(">>>>>>>>>>>>>>程序加载完成");

        //创建滚动视图控制器的实力
        let vc = PageControlViewController();
        //将其作为当前窗口的根视图
        self.window?.rootViewController=vc;        
        return true
}

之后只需要在作为程序入口的PageControlViewController中操作就可以

class PageControlViewController: UIViewController ,UIScrollViewDelegate{//滚动视图的代理协议 UIScrollViewDelegate
    //滚动视图组建
    var scrollView = UIScrollView();
    //控制滚动视图翻页的属性
    var pageControl = UIPageControl();
    //记录滑动状态
    var isPageControlUsed = false;
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        test1();
    }
    
    
    //视图控制器和滚动视图
    func test1()  {
        //获取屏幕尺寸信息
        var screenFrame = UIScreen.main.bounds;
        //获取宽高
        let screenWidth = screenFrame.size.width;
        let screenHeight=screenFrame.size.height;
        //创建一个区域 显示之前创建的视图控制器
        scrollView.frame=screenFrame;
        //设置滚动分页信息 ,每次滚动1页
        scrollView.isPagingEnabled=true;
        //设置滚动视图的尺寸 有first和second两个页面。所以设置两倍的页面宽度
        scrollView.contentSize=CGSize(width: screenWidth*2, height: screenHeight);
        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);
        
        
        //创建first视图控制器实例
        let firstController = FirstSubViewController();
        screenFrame.origin.x=0;
        firstController.view.frame=screenFrame;
        
        let secondController = SecondSubViewController();
        screenFrame.origin.x=screenFrame.size.width;
        //设置second视图控制器的显示区域
        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 width=scrollView.frame.size.width;
            //根据当前移动量计算当前页码
            let page=(CGFloat)((scrollView.contentOffset.x-width/2)/width)+1;
            //使用页面控制器 调整页码
            pageControl.currentPage=Int(page);
        }
    }
    
    func scrollViewDidEndDecelerating(scrollView:UIScrollView) {
        isPageControlUsed=false;
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

猜你喜欢

转载自blog.csdn.net/qq_21153627/article/details/83986791