//
// ViewController0201.swift
// 演示demo
//
import UIKit
class ViewController0201: UIViewController , UIScrollViewDelegate {
//滚动视图是一个可以拖动的组件
var scrollView = UIScrollView()
//添加一个控制翻页的属性
var pageControl = UIPageControl()
//添加一个状态属性,来标志页面的滑动状态
var isPageControlUsed = false
override func viewDidLoad (){
super.viewDidLoad()
self.navigationItem.title = "轮播图"
//获取当前设备的屏幕尺寸信息
var screenFrame = UIScreen.main.bounds
let screenWidth = screenFrame.width
let screenHeight = screenFrame.height
scrollView.frame = screenFrame
//设置分页模式,滚动一次就是一页
scrollView.isPagingEnabled = true
//设置滚动视图的宽度
scrollView.contentSize = CGSize(width:screenWidth * 2,height:screenHeight - 64)
//设置滚动视图的背景色为白色
scrollView.backgroundColor = UIColor.white
self.scrollView.showsHorizontalScrollIndicator = false //滚动时是否显示垂
self.scrollView.showsVerticalScrollIndicator = false //是否加反弹效果
self.scrollView.bounces = false //滚动条的样式
//设置滚动视图对像的代理为当前类,这样就可以在当前文件中编写方法,以捕捉滚动视图的相关动作
scrollView.delegate = self
//在创建一个高度常量,做页面控制器对像的高度
let pcHeight:CGFloat = 50.0
//创建一个区域显示页面控制器对象
let pcRaect = CGRect(x:0 , y:screenHeight - pcHeight , width:screenWidth , height:pcHeight)
pageControl.frame = pcRaect
pageControl.numberOfPages = 2
pageControl.currentPage = 0
// pageControl.backgroundColor = UIColor.gray
//添加监听页面切换的方法
pageControl.addTarget(self, action:
//创建第一个视图控制器的实例
let firstContorller = ViewController0201_1()
//设置坐标原点的横向值为零
screenFrame.origin.x = 0
firstContorller.view.frame = screenFrame
//创建第二个视图控制器的实例
let secondControler = ViewController0201_2()
screenFrame.origin.x = screenFrame.size.width
secondControler.view.frame = screenFrame
scrollView.addSubview(firstContorller.view)
scrollView.addSubview(secondControler.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
}
}
/*
其他设置
scrollview?.maximumZoomScale = 2.0 //最小比例
scrollview?.minimumZoomScale = 0.5 //最大比例
scrollview?.canCancelContentTouches = false //当值是YES的时候,用户触碰开始。要延迟一会,看看是否用户有意图滚动。假如滚动了,那么捕捉触摸事件,否则就不捕捉。假如值是NO,当用户触碰,scroll view会立即触发
scrollview.delaysContentTouches = true //分页滑动
self.scrollview?.pagingEnabled = true //开启滚动
self.scrollview?.scrollEnabled = true //滚动时是否显示水平滚动条
self.scrollview?.showsHorizontalScrollIndicator = false //滚动时是否显示垂
self.scrollview?.showsVerticalScrollIndicator = false //是否加反弹效果
self.scrollview?.bounces = true //滚动条的样式
self.scrollview?.indicatorStyle = .White //黑色:黑色
设置代理
scrollview ?, delegate = self
实现代理方法
//只要滚动了就会触发
func scrollViewDidScroll(scrollView:UIScrollView){}
//开始拖动视图
func scrollViewWillBeginDragging(scrollView:UIScrollView){}
//完成拖动
func scrollViewDidEndDragging(scrollView:UIScrollView,willDecelerate减速:Bool){}
//将开始降速时
func scrollViewWillBeginDecelerating(scrollView:UIScrollView){}
//减速停止了时执行,手触摸时执行执行
func scrollViewDidEndDecelerating(scrollView:UIScrollView){}
//滚动动画停止时执行,代码改变时出发,也就是setContentOffset改变时
func scrollViewDidEndScrollingAnimation(scrollView:UIScrollView){}
//设置放大缩小的视图,要是UIScrollView中的子视图
func viewForZoomingInScrollView(scrollView:UIScrollView) - > UIView?{}
//完成放大缩小时调用
func scrollViewDidEndZooming(scrollView:UIScrollView,withView视图:UIView ?, atScale scale:CGFloat){}
//如果你不是完全滚动到滚轴视图的顶部,你可以轻点状态栏,那个可视的滚轴视图会一直滚动到顶部,那是默认行为,你可以通过该方法返回NO来关闭它
func scrollViewShouldScrollToTop(scrollView:UIScrollView) - > Bool {} func scrollViewDidScrollToTop(scrollView:UIScrollView){}