版权声明:本文为博主原创文章,未经博主允许不得转载。 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.
}
}