改進版本在demo中Example
https://github.com/sundayios/SPPageMenuCenterLine.git
1.標題之間添加分割線 可設置分割線到邊界距離 設置分割線顏色
self.dataArr = @[@"生活aaa",@"影視中心",@"交通aaa",@"電視劇",@"搞笑",@"綜藝"];
SPPageMenu *pageMenu = [SPPageMenu pageMenuWithFrame:CGRectMake(0, NaviH, screenW, pageMenuH) trackerStyle:SPPageMenuTrackerStyleRect];
//設置帶標題的按鈕,圖片有幾種狀態,
//在有三種狀態下,第三態可設置是否隱蹤指示器
//在此移動可顯示指示器
pageMenu.itemIconStatesNumber = SPItemIconStatesNumberOne;
pageMenu.hiddenBoomLineAtThirdState = true;
pageMenu.unSelectedItemTitleColor = [UIColor grayColor];
pageMenu.selectedItemTitleColor = [UIColor greenColor];
//設置跟蹤器高 寬
pageMenu.trackerHeight = 1;
pageMenu.trackerWidth = [UIScreen mainScreen].bounds.size.width / 4.0;
// 傳遞數組,默認選中第1個
[pageMenu setItems:self.dataArr selectedItemIndex:0];
// 指定第1個item為圖片aaa
[pageMenu setImage:[UIImage imageNamed:@"Expression_1"] forItemAtIndex:0];
// 指定第2個item同時含有圖片和文字,圖片在上
SPPageMenuButtonItem *item1 = [SPPageMenuButtonItem itemWithNorTitle:@"nor" selTitle:@"sel" norImage:[UIImage imageNamed:@"Expression_1"] selImage:[UIImage imageNamed:@"Expression_2"] thirdImage:[UIImage imageNamed:@"Expression_3"] imagePosition:SPItemImagePositionRight];
item1.imagePosition = SPItemImagePositionRight;
[pageMenu setItem:item1 forItemAtIndex:1];
// 指定第4個item同時含有圖片和文字,圖片在右
SPPageMenuButtonItem *item2 = [SPPageMenuButtonItem itemWithTitle:@"歌曲" image:[UIImage imageNamed:@"asc"] imagePosition:SPItemImagePositionRight];
[pageMenu setItem:item2 forItemAtIndex:3];
pageMenu.delegate = self;
//設置顯示標題間分割線
pageMenu.spaceLineColor = [UIColor greenColor];
//設置標題間分割線到邊界距離
pageMenu.spaceLineMargin = 8;
GitHub https://github.com/SPStore/SPPageMenu
http://www.code4app.com/thread-31385-1-1.html
目錄
- 如何安裝
- 部分功能演示圖
- 重難點講解
- 使用者提問
如何安裝
版本3.5.0
target 'MyApp' do
pod 'SPPageMenu', '~> 3.5.0'
end
說明:3.5.0版本在3.4.5版本的基礎上改動如下:
1、新增7個API
* - (void)setContent:(id)content forItemAtIndex:(NSUInteger)itemIndex;
* - (void)setCustomSpacing:(CGFloat)spacing afterItemAtIndex:(NSUInteger)itemIndex;
* - (CGFloat)customSpacingAfterItemAtIndex:(NSUInteger)itemIndex;
* - (CGRect)titleRectRelativeToPageMenuForItemAtIndex:(NSUInteger)itemIndex;
* - (CGRect)imageRectRelativeToPageMenuForItemAtIndex:(NSUInteger)itemIndex;
* - (CGRect)buttonRectRelativeToPageMenuForItemAtIndex:(NSUInteger)itemIndex;
* - (void)addComponentViewInScrollView:(UIView *)componentView;
2、在不可滑動自適應內容的排列方式下,設置間距依然生效
3、修復設置指定item寬度和內間距失效問題
4、修復多次對bridgeScrollView賦值上一個KVO觀察者未移除問題
版本3.4.5
target 'MyApp' do
pod 'SPPageMenu', '~> 3.4.5'
end
說明:3.4.5版本在3.4.4版本的基礎上修復了先設置unSelectedItemTitleFont,再設置items文字顯示不全問題
部分功能演示圖
(友情提示:如果您的網絡較慢,gif圖可能會延遲加載,您可以先把寶貴的時間瀏覽其它信息)

重難點講解
// 該屬性是選中的按鈕下標,大家可以通過這個屬性判斷選擇了第幾個按鈕,如果改變其值,可以用於切換選中的按鈕
@property (nonatomic) NSInteger selectedItemIndex;
// 這個scrollView是外界傳進來的scrollView,通常的案例都是在pageMenu的下方有若干個子控制器在切換,子控制器的切換由滑動
scrollView實現,使用者只需要把該scrollView傳給bridgeScrollView,SPPageMenu框架內部會監聽該scrollView的橫向滾動,實
現了讓跟蹤器時刻跟隨該scrollView滾動的效果。暫時不支持監聽垂直方向的滾動,如果你的scrollVeiw要垂直滾動實現切換按鈕,你
不妨可以嘗試自己在-scrollViewDidScroll:代理方法中設置selectedItemIndex的值
@property (nonatomic, strong) UIScrollView *bridgeScrollView;
// 排列方式:支持3種排列方式;1、可滑動,按鈕寬度根據內容自適應;2、不可滑動,按鈕等寬;3、不可滑動,按鈕寬度根據內容自
適應。3種排列方式都有非常高的使用頻率。第1種排列方式:SPPageMene的容量會根據按鈕個數而定;第2種和第3種排列方式:SPPageMenu
的容量固定為SPPageMenu的寬度
@property (nonatomic, assign) SPPageMenuPermutationWay permutationWay;
// 跟蹤器跟蹤模式;這個屬性從3.4版本開始閃亮登場。該屬性是個枚舉,共3個:1、SPPageMenuTrackerFollowingModeAlways,這個
枚舉值的意思是讓跟蹤器時刻跟隨外界scrollView(即bridgeScrollView)橫向移動; 2、SPPageMenuTrackerFollowingModeEnd,這個
枚舉的意思是當外界scrollView滑動結束時,跟蹤器才開始移動;相當於3.4版本之前的closeTrackerFollowingMode屬性 3、
SPPageMenuTrackerFollowingModeHalf,這個枚舉的意思是當外界scrollView拖動距離超過屏幕一半時,跟蹤器開始移動。
@property (nonatomic, assign) SPPageMenuTrackerFollowingMode trackerFollowingMode;
// 內容的四周內邊距(內容不包括分割線),默認UIEdgeInsetsZero;這個屬性是個驚喜,往往能做到一些你意想不到的事情。假如你的
SPPageMenu控件高度固定不變,想要設置跟蹤器與按鈕之間的垂直間距變小,就可以設置該屬性的top和bottom值,讓SPPageMenu的
內容在垂直方向上內縮
@property (nonatomic, assign) UIEdgeInsets contentInset;
// 該方法的效果和屬性bridgeScrollView功能一致,如果外界想通過該方法實現跟蹤器時刻跟隨scrollView移動,可以在代理方法
-scrollViewDidScroll:中調用該方法,如果方法和屬性同時實現,屬性優先級更高
- (void)moveTrackerFollowScrollView:(UIScrollView *)scrollView;
// 代理方法:若以下2個代理方法同時實現了,只會走第2個代理方法(第2個代理方法包含了第1個代理方法的功能)
// 代理方法何時觸發?代理方法有2種方式會觸發,第一種是點擊了SPPageMenu的按鈕,這種方式無論點擊的按鈕是否同一個都會觸發;
第二種是由滑動外界scrollView而觸發,當跟蹤模式為SPPageMenuTrackerFollowingModeAlways和SPPageMenuTrackerFollowingModeEnd
時,滑動scrollView結束的時候觸發地代理方法,當跟蹤器的跟蹤模式為SPPageMenuTrackerFollowingModeHalf時,滑動scrollView
超過一半時就會觸發代理方法
- (void)pageMenu:(SPPageMenu *)pageMenu itemSelectedAtIndex:(NSInteger)index;
- (void)pageMenu:(SPPageMenu *)pageMenu itemSelectedFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex;
想了解更多使用細節,大家可以把demo下載到本地,里面有非常多的示例以及詳細的注釋
