CAPSPageMenu.swift的开头为一个@objc公共协议,这个协议的委托由具体
添加该CAPSPageMenu的viewcontroller接受。
public
init
(viewControllers: [
UIViewController
],frame:
CGRect
,options: [
String
:
AnyObject
]?) {
super
.
init
(nibName:
nil
,bundle:
nil
)
controllerArray
= viewControllers
self
.
view
.
frame
= frame
}
这是该类的基本初始化
方法,viewController为初始化时传入的Controller数组,即通过
菜单切换时所展示的若干个viewcontroller;frame为切换
菜单scroll menu的大小;options该初始化
方法中未被处理。
convenience
CAPSPageMenuOption
]?) {
}
这是该类在Demo5中所使用的初始化
方法,viewcontroller与frame的含义与上个初始化
方法相同,pageMenuOptions是一个枚举类型的数组,用于配置切换
菜单的各种参数,通过带参数的枚举类型传值确实是我第一次见.. 如下图,只
截取部分。
if let options = pageMenuOptions {
for option in options {
switch (option) {
case let .SelectionIndicatorHeight(value):
selectionIndicatorHeight = value
case let .MenuItemSeparatorWidth(value):
menuItemSeparatorWidth = value
case let .ScrollMenuBackgroundColor(value):
scrollMenuBackgroundColor = value
case let .ViewBackgroundColor(value):
viewBackgroundColor = value
case let .BottomMenuHairlineColor(value):
bottomMenuHairlineColor = value
case let .SelectionIndicatorColor(value):
selectionIndicatorColor = value
case let .MenuItemSeparatorColor(value):
menuItemSeparatorColor = value
case let .MenuMargin(value):
menuMargin = value
case let .MenuHeight(value):
menuHeight = value
传入的是枚举类型数组,该枚举类型中不同的具体类型代表需要配置的不同方面,每个具体类型中含有一个参数,作为对该方面的具体配置。
比起传入anyobject类型的数组,然后通过index进行配置的方式,好处有:
1.使用枚举类型,避免了使用anyobject所造成的类型模糊
2.每个具体类型在传入时都同时带有该类型的
功能描述和配置参数,增强了
代码的可读性。
setUpUserInterface
()
if
menuScrollView
.
subviews
.
count
==
0
{
configureUserInterface
()
}
这段
代码出现在上述第二个初始化
方法中,若该
页面为第一次加载则需
调用configureUserInterface进行
页面设置。
func
configureUserInterface()
1.为menuScrollView也就是四个按键配置点击手势识别,该View是UIScrollView的实例,
调用handleMenuItemTap来判断应该切换到四个界面之中的哪个。
2.通过for循环具体配置menuScrollView的四个MenuItemView,同时在下方
显示第一个page。
3.最后的selection indicator是当前选择按钮的下划线。
func
setUpUserInterface()
该
函数用于创建
用户界面,创建用于装载
内容的menuScrollView和controllerScrollView,并将其
添加到主view中。
public
func
scrollViewDidScroll(scrollView:
UIScrollView
)
1.判断划动方向,赋值给newScrollDirection,以此来
修改currentPageIndex参数,然后
调用addPageAtIndex
函数将划动后选择的
页面加载到controllerScrollView上。
2.加载划动动画
显示时所展示出来的部分相邻的viewController
页面。
3.调整当前view与划动时相邻view的
显示比例。
pagesAddedDictionary
[index] = index
这句的作用是注明第index页已被加载,该数组的作用就是记录
页面的加载情况。
func
scrollViewDidEndDecelerating(scrollView:
UIScrollView
)
func
scrollViewDidEndTapScrollingAnimation()
UIScrollView的setContentOffset:animated:
UIScrollView的scrollRectToVisible:animated:
UITableView的scrollToRowAtIndexPath:atScrollPosition:animated:
UITableView的selectRowAtIndexPath:animated:scrollPosition:
override
func
viewDidLayoutSubviews()
配置controllerScrollView大小、配置selectionIndicatorbar大小、配置menu item大小。
func
moveToPage(index:
Int
)