SPPageMenu的github地址:https://github.com/SPStore/SPPageMenu
一、cocopods导入
platform:ios,'8.0'
target 'MyApp' do
pod 'SPPageMenu', '~> 3.5.0'
end
二、 效果演示图
(演示图中仅展示了部分功能,更多功能请进入github下载源代码,如果您的网络较慢,gif图可能会延迟加载,您可以先把宝贵的时间浏览其它信息)
Untitled.gif
三、 重难点方法和属性详解
// 这个方法用于传递数据,items里面可以是NSString、UIImage 或SPPageMenuButtonItem类型,每个item会根据传的元素类型自动展示你要的内容;selectedItemIndex是选中的item下标,selectedItemIndex不可超过 items的范围
- (void)setItems:(nullable NSArray *)items selectedItemIndex:(NSUInteger)selectedItemIndex;
A46F678B-C330-4971-993B-C2AA048C98A6.jpeg
// 这个属性命名为“桥梁scrollView”,当外界的scrollView在左右切换的时候,需要让跟踪器时刻跟随该scrollView滚动,bridgeScrollView就是外界左右切换的scrollView。只要bridgeScrollView有值了,SPPageMenu会监听bridgeScrollView的滚动状态,从而让跟踪器有跟随效果。如果你忘了设置这个属性或者觉得不好,你还可以在scrollViewDidScroll的代理方法中,调用SPPageMenu的接口“- (void)moveTrackerFollowScrollView:(UIScrollView *)scrollView”。
@property (nonatomic, strong) UIScrollView *bridgeScrollView;
// 排列方式:支持3种排列方式;1、可滑动,按钮宽度根据内容自适应;2、不可滑动,按钮等宽;3、不可滑动,按钮宽度根据内容自适应。3种排列方式都有非常高的使用频率。第1种排列方式:SPPageMene的容量会根据按钮个数而定;第2种和第3种排列方式:SPPageMenu的容量固定为SPPageMenu的宽度
@property (nonatomic, assign) SPPageMenuPermutationWay permutationWay;
-
排列方式一:SPPageMenuPermutationWayScrollAdaptContent
5ADC4C3A2C55E428CB93E627108AD19B.jpg -
排列方式二:SPPageMenuPermutationWayNotScrollEqualWidths
795A7E94AB1D002B026A7EB346599CE5.jpg -
排列方式三:SPPageMenuPermutationWayNotScrollAdaptContent
C3EEA99CD066F43DD5CCAEBCBD0D8C76.jpg
// 跟踪器跟踪模式;这个属性从3.4版本开始闪亮登场。该属性是个枚举,共3个:1、SPPageMenuTrackerFollowingModeAlways,这个枚举值的意思是让跟踪器时刻跟随外界scrollView(即bridgeScrollView)横向移动; 2、SPPageMenuTrackerFollowingModeEnd,这个枚举的意思是当外界scrollView滑动结束时,跟踪器才开始移动;相当于3.4版本之前的closeTrackerFollowingMode属性 3、SPPageMenuTrackerFollowingModeHalf,这个枚举的意思是当外界scrollView拖动距离超过屏幕一半时,跟踪器开始移动。
@property (nonatomic, assign) SPPageMenuTrackerFollowingMode trackerFollowingMode;
请大家仔细观察跟踪器(按钮下面的下划线)开始移动的时刻
-
跟踪模式一:SPPageMenuTrackerFollowingModeAlways
always.gif -
跟踪模式二:SPPageMenuTrackerFollowingModeEnd
end.gif -
跟踪模式三:SPPageMenuTrackerFollowingModeHalf
half.gif
// 这个属性是设置内容的四周边距,例如如果你想让跟踪器距离底部分割线有一段距离,你就可以设置contentInset的底部间距,这里指的内容是不包括底部分割线的。
@property (nonatomic, assign) UIEdgeInsets contentInset;
下面截图是设置pageMenu.contentInset = UIEdgeInsetsMake(0, 50, 0, 50)
的结果,绿色为SPPageMenu的背景色,黄色部分是内容
1391991C798B9E6DA6345401EE03A227.jpg
// // 设置指定item的四周内边距,这和上面那个属性不一样,上面的属性contentInset作用对象是SPPageMenu整个控件,而这个方式作用对象是SPPageMenu里的一个按钮
- (void)setContentEdgeInsets:(UIEdgeInsets)contentEdgeInsets forItemAtIndex:(NSUInteger)itemIndex;
// 这个方法在描述bridgeScrollView的时候有提到过,在外界的scrollViewDidScroll代理方法中调用,可以让跟踪器时刻跟随scrollView滑动,如果bridgeScrollView已经赋过值,那这个方法就没必要去调用了。
- (void)moveTrackerFollowScrollView:(UIScrollView *)scrollView;
以上介绍的属性和方法只是部分的,其余属性和方法相对简单,框架中也有非常详细的注释,这里就不再多做介绍
四、 适用场景
网易新闻
A7FD723F-E458-437A-AD3F-D990C8F49C26.jpeg
爱奇艺
09145AB7-9FA8-4442-8E66-28A5D02EB4A6.jpeg
微博
8D4F4543-97C8-43AB-A6ED-152ACC35429D.jpeg
淘宝
8663770C-5DB5-4100-B53D-870B3E007CE8.jpeg