Swift实现类网易云音乐横向scroll menu切换菜单(二)

Swift实现类网易云音乐横向scroll menu切换菜单(二),第1张

概述从这篇文章准备深入分析scroll menu切换菜单的实现,效果图、框架的github链接可见上一篇文章。 CAPSPageMenu.swift的开头为一个@objc公共协议,这个协议的委托由具体添加该CAPSPageMenu的viewcontroller接受。     public init (viewControllers: [ UIViewController ], frame: CGRec 从这篇文章准备深入分析scroll menu切换菜单的实现,效果图、框架的github链接可见上一篇文章。
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 )
该函数在Demo中没有被调用其功能为跳到某一特定Page页面,部分函数功能与前面配置用户界面设置点击时间时所调用的函数handleMenuItemTap相同。 总结

以上是内存溢出为你收集整理的Swift实现类网易云音乐横向scroll menu切换菜单(二)全部内容,希望文章能够帮你解决Swift实现类网易云音乐横向scroll menu切换菜单(二)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1086851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存