}@H_301_14@
@H_301_0@
这是该类在Demo5中所使用的初始化方法,viewcontroller与frame的含义与上个初始化方法相同,pageMenuOptions是一个枚举类型的数组,用于配置切换菜单的各种参数,通过带参数的枚举类型传值确实是我第一次见.. 如下图,只截取部分。
@H_301_0@
@H_301_0@
if@H_301_14@ let@H_301_14@ options = pageMenuOptions {
for@H_301_14@ option in@H_301_14@ options {
switch@H_301_14@ (option) {
case@H_301_14@ let@H_301_14@ .SelectionIndicatorHeight(value):
selectionIndicatorHeight@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .MenuItemSeparatorWidth(value):
menuItemSeparatorWidth@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .ScrollMenuBackgroundColor(value):
scrollMenuBackgroundColor@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .ViewBackgroundColor(value):
viewBackgroundColor@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .BottomMenuHairlineColor(value):
bottomMenuHairlineColor@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .SelectionIndicatorColor(value):
selectionIndicatorColor@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .MenuItemSeparatorColor(value):
menuItemSeparatorColor@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .MenuMargin(value):
menuMargin@H_301_14@ = value
case@H_301_14@ let@H_301_14@ .MenuHeight(value):
menuHeight@H_301_14@ = value
@H_301_0@
@H_301_0@
传入的是枚举类型数组,该枚举类型中不同的具体类型代表需要配置的不同方面,每个具体类型中含有一个参数,作为对该方面的具体配置。
@H_301_0@
@H_301_0@
比起传入anyobject类型的数组,然后通过index进行配置的方式,好处有:
@H_301_0@
1.使用枚举类型,避免了使用anyobject所造成的类型模糊
@H_301_0@
2.每个具体类型在传入时都同时带有该类型的功能描述和配置参数,增强了代码的可读性。
@H_301_0@
@H_301_0@
@H_301_14@
setUpUserInterface@H_301_14@
()
@H_301_14@
if@H_301_14@
@H_301_14@
menuScrollView@H_301_14@
.@H_301_14@
subviews@H_301_14@
.@H_301_14@
count@H_301_14@
== @H_301_14@
0@H_301_14@
{
@H_301_14@
configureUserInterface@H_301_14@
()@H_301_14@@H_301_14@@H_301_14@
@H_301_0@
}@H_301_14@@H_301_14@
@H_301_0@
@H_301_14@@H_301_14@
@H_301_0@
这段代码出现在上述第二个初始化方法中,若该页面为第一次加载则需调用configureUserInterface进行页面设置。
@H_301_0@
@H_301_0@
@H_301_14@
func@H_301_14@
configureUserInterface()@H_301_14@
@H_301_0@
@H_301_0@
该函数实现的主要功能有:
@H_301_0@
1.为menuScrollView也就是四个按键配置点击手势识别,该View是UIScrollView的实例,调用handleMenuItemTap来判断应该切换到四个界面之中的哪个。
@H_301_0@
2.通过for循环具体配置menuScrollView的四个MenuItemView,同时在下方显示第一个page。
@H_301_0@
3.最后的selection indicator是当前选择按钮的下划线。
@H_301_0@
@H_301_0@
func@H_301_14@
setUpUserInterface()@H_301_14@
@H_301_0@
@H_301_0@
该函数用于创建用户界面,创建用于装载内容的menuScrollView和controllerScrollView,并将其添加到主view中。
@H_301_0@
@H_301_0@
public@H_301_14@
@H_301_14@
func@H_301_14@
scrollViewDidScroll(scrollView:@H_301_14@
UIScrollView@H_301_14@
)@H_301_14@
@H_301_0@
@H_301_0@
1.判断划动方向,赋值给newScrollDirection,以此来修改currentPageIndex参数,然后调用addPageAtIndex函数将划动后选择的页面加载到controllerScrollView上。
@H_301_0@
2.加载划动动画显示时所展示出来的部分相邻的viewController页面。
@H_301_0@
3.调整当前view与划动时相邻view的显示比例。
@H_301_0@
pagesAddedDictionary@H_301_14@
[index] = index@H_301_14@
@H_301_0@
这句的作用是注明第index页已被加载,该数组的作用就是记录页面的加载情况。
@H_301_0@
@H_301_0@
func@H_301_14@
scrollViewDidEndDecelerating(scrollView:@H_301_14@
UIScrollView@H_301_14@
)@H_301_14@
@H_301_0@
@H_301_0@
当
触摸屏幕并拖拽画面,最后滚动停止@H_301_14@时会调用此函数,将其它加载的页面删除,将当前页面设置成划动起始页面,清空记录页面情况的数组。
@H_301_0@
@H_301_14@@H_301_14@@H_301_14@@H_301_14@
@H_301_0@
func@H_301_14@
scrollViewDidEndTapScrollingAnimation()@H_301_14@
@H_301_0@
调用以下函数,来自动滚动到想要的位置,此过程中设置有动画效果,停止时,触发上述函数@H_301_14@
@H_301_0@
UIScrollView的setContentOffset:animated:
@H_301_0@
UIScrollView的scrollRectToVisible:animated:@H_301_14@
@H_301_0@
UITableView的scrollToRowAtIndexPath:atScrollPosition:animated:@H_301_14@
@H_301_0@
UITableView的selectRowAtIndexPath:animated:scrollPosition:@H_301_14@
@H_301_0@
@H_301_14@
@H_301_0@
该函数内容与上一个函数内容相同,完成滚动结束时的收尾工作。@H_301_14@
@H_301_0@
@H_301_14@
@H_301_0@
override@H_301_14@
@H_301_14@
func@H_301_14@
viewDidLayoutSubviews()@H_301_14@
@H_301_0@
@H_301_0@
配置controllerScrollView大小、配置selectionIndicatorbar大小、配置menu item大小。
@H_301_0@
@H_301_0@
func@H_301_14@
moveToPage(index:@H_301_14@
Int@H_301_14@
)@H_301_14@
@H_301_0@
@H_301_14@@H_301_14@
@H_301_0@
该函数在Demo中没有被调用其功能为跳到某一特定Page页面,部分函数功能与前面配置用户界面设置点击时间时所调用的函数handleMenuItemTap相同。