SPPageMenu的github地址:https://github.com/SPStore/SPPageMenu
一、 效果演示图
(演示图中仅展示了部分功能,更多功能请进入github下载源代码,如果您的网络较慢,gif图可能会延迟加载,您可以先把宝贵的时间浏览其它信息)
二、 重难点方法和属性详解
// 以下2个方法都用于创建pagMenu
+ (instancetype)pageMenuWithFrame:(CGRect)frame trackerStyle:(SPPageMenuTrackerStyle)trackerStyle;
- (instancetype)initWithFrame:(CGRect)frame trackerStyle:(SPPageMenuTrackerStyle)trackerStyle;
// 这个方法用于传递数据,items里面可装NSString或UIImage,每个item会根据传的是NSString还是UIImage而展示文字或者图片;selectedItemIndex是选中的item下标,selectedItemIndex不可超过 items的范围
- (void)setItems:(nullable NSArray *)items selectedItemIndex:(NSUInteger)selectedItemIndex;
// 这个属性是被选中的item下标
@property (nonatomic) NSUInteger selectedItemIndex;
// 这个属性命名为“桥梁scrollView”,意味着它是连接SPPageMenu与外界的桥梁。当外界的scrollView在左右切换的时候,需要让跟踪器时刻跟随该scrollView滚动,bridgeScrollView就是外界左右切换的scrollView。只要bridgeScrollView有值了,SPPageMenu会监听bridgeScrollView的滚动状态,从而让跟踪器有跟随效果。如果你忘了设置这个属性或者觉得不好,你还可以在scrollViewDidScroll的代理方法中,调用SPPageMenu的接口“- (void)moveTrackerFollowScrollView:(UIScrollView *)scrollView”。
@property (nonatomic, strong) UIScrollView *bridgeScrollView;
// 这个属性是关闭跟踪器的时刻跟随scrollView的效果,如果关闭了,在外界对bridgeScrollView赋值了或者调用了- (void)moveTrackerFollowScrollView:(UIScrollView *)scrollView的情况下,跟踪器会在scrollView滑动结束的时候才跟踪
@property (nonatomic, assign) BOOL closeTrackerFollowingfMode;
// 这个属性是设置内容的四周边距,例如如果你想让跟踪器距离底部分割线有一段距离,你就可以设置contentInset的底部间距,这里指的内容是不包括底部分割线的。
@property (nonatomic, assign) UIEdgeInsets contentInset;
// 这个方法是为指定的item同时设置图片和文字,参数imagePosition决定图片的位置,分上、下、左、右,ratio是图片所占比例,取值范围0~1,默认是0.5,即图片文字各占一半
- (void)setTitle:(nullable NSString *)title image:(nullable UIImage *)image imagePosition:(SPItemImagePosition)imagePosition imageRatio:(CGFloat)ratio forItemIndex:(NSUInteger)itemIndex;
// 这个方法和上面那个方法类似,只是设置对象不同,上面的方法是为指定item设置,这个方法是为功能按钮设置
- (void)setFunctionButtonTitle:(nullable NSString *)title image:(nullable UIImage *)image imagePosition:(SPItemImagePosition)imagePosition imageRatio:(CGFloat)ratio forState:(UIControlState)state;
// 这个方法在描述bridgeScrollView的时候有提到过,在外界的scrollViewDidScroll代理方法中调用,可以让跟踪器时刻跟随scrollView滑动,如果bridgeScrollView已经赋过值,那这个方法就没必要去调用了。
- (void)moveTrackerFollowScrollView:(UIScrollView *)scrollView;
网友评论
for (int i = 0; i < self.dataArr.count; i++) {
DBViewController *VC = [[DBViewController alloc]init];
VC.msgStyle = i;
[self addChildViewController:VC];
[self.myChildViewControllers addObject:VC];
}
按照你demo上的这种写法,已经加载过的页面 就不走viewWillAppear方法.
Key path: contentOffset
Observed object: <UIScrollView: 0x15a008400; frame = (0 0; 0 0); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x1c4241800>; layer = <CALayer: 0x1c4228e00>; contentOffset: {0, 0}; contentSize: {1500, 0}; adjustedContentInset: {0, 0, 0, 0}>
Change: {
kind = 1;
new = "NSPoint: {0, 0}";
}
Context: 0x0
(null)
比如@“ 哈哈”,空格就起到间距作用。storyboard使用的意思是不是可以把该控件直接拖进去然后在故事板里操作属性?那我好像还真不会,只有系统的控件才能直接在故事版里操作吧,只能先拖一个空白的view,然后关联我这个类SPPageMenu,再去代码里设置属性和方法。你还要自定义程度高点?比如呢,还有什么需要我做的。