favimg
效果示例
WYDemo2.gif
這是一個控件懸停的UI效果實(shí)現(xiàn)棚赔,類似于網(wǎng)易云課堂的詳情頁UI效果
更新 2020 - 11 - 04
由于之前的設(shè)計對項(xiàng)目的侵入性太強(qiáng)(需要繼承自代碼提供的父類),導(dǎo)致在項(xiàng)目中實(shí)際應(yīng)用時预皇,很多功能限制,導(dǎo)致諸多不便塞帐。本次更新針對這個問題提供了一個抽象層:
- 管理類
- FMMixScrollBaseDelegateManager
將所有交互邏輯放在了這里
- FMMixScrollBaseDelegateManager
- 配置
- FMMixScrollConfig
可配置內(nèi)容:
- FMMixScrollConfig
/** 傳入的子控制器的數(shù)組 ps:不可變數(shù)組, 最多不要超過5個(暫不支持滑動)*/
@property (nonatomic, strong) NSArray <UIViewController *>*childVCArr;
/** 傳入的UITableView 或 UICollectionView數(shù)組 ps:不可變數(shù)組, 最多不要超過5個(暫不支持滑動)*/
@property (nonatomic, strong) NSArray <UIScrollView *>*scrollTorCArr;
/** 轉(zhuǎn)入的頭部視圖的image圖片的名稱 */
@property (nonatomic, strong) NSString *headImageName;
/** 是否允許headView縮放纫溃,默認(rèn)NO */
@property (nonatomic, assign) BOOL isStretch;
/** 頂部圖片高度 */
@property (nonatomic, assign) CGFloat headImage_H;
/** 按鈕的高度 ps:寬度由按鈕個數(shù)決定,平分屏幕寬度 */
@property (nonatomic, assign) CGFloat button_H;
/** bar懸停的位置 ps:默認(rèn)為navigationBar + statusBar的高度 */
@property (nonatomic, assign) CGFloat barStop_H;
/** button下面指示條的顏色 */
@property (nonatomic, strong) UIColor *indicatorColor;
/** 是否隱藏指示條 */
@property (nonatomic, assign) BOOL isIndicatorHidden;
/** button的名稱 */
@property (nonatomic, strong) NSArray *btnTitleArr;
/** button的選中名稱 */
@property (nonatomic, strong) NSArray *btnSelectedTitleArr;
/** button的font */
@property (nonatomic, strong) UIFont *btnFont;
/** button的selected title color */
@property (nonatomic, strong) UIColor *btnSelectedTitleColor;
/** button的normal titl color*/
@property (nonatomic, strong) UIColor *btnNormalTitleColor;
/** button的背景顏色 */
@property (nonatomic, strong) UIColor *btnBackColor;
/** view 是否需要懶加載,ps:為YES時赁酝,子視圖初次初始化時犯祠,若bar不在原位,會自動置回 */
@property (nonatomic, assign) BOOL shouldLazyLoad;
/// 測試使用
@property (nonatomic, assign) BOOL isTest;
項(xiàng)目中具體使用示例:(swift 版本)
lazy var manager: FMMixScrollBaseDelegateManager = {
// 配置類
let config = FMMixScrollConfig()
// 子controller
let processing = WBWorkRecordProcessingViewController()
processing.isMixScroll = true
let success = WBWorkRecordSuccessViewController()
success.isMixScroll = true
let failure = WBWorkRecordFailureViewController()
failure.isMixScroll = true
// 設(shè)置具體配置項(xiàng)
config.headImage_H = WBWorkRecordDetailHeader.H
config.childVCArr = [processing, success, failure]
config.scrollTorCArr = [processing.tableView, success.tableView, failure.tableView]
config.btnTitleArr = [
LocalizedString("wbProcessing", value: "處理中", comment: "處理中"),
LocalizedString("wbSuccess", value: "成功", comment: "成功"),
LocalizedString("wbFailure", value: "失敗", comment: "失敗")]
config.btnBackColor = UIColor.appWhite
let manager = FMMixScrollBaseDelegateManager(config: config, fatherController: self)
// 設(shè)置子controller的delegate為manager
processing.delegate = manager
success.delegate = manager
failure.delegate = manager
// 設(shè)置 manager的delegate為當(dāng)前控制器(即父控制器)
manager.delegate = self
return manager
}()
// 實(shí)現(xiàn)manager的代理方法
extension WBWorkRecordDetailViewController: FMMixScrollManagerDelegate {
func currentSelectedIndex(_ index: Int) {
headerView.updateLabelTextColor(index)
}
}
1.工程引入FMBaseViewController, 并添加要自定義的controller
- 有關(guān)頭部image及button的相關(guān)設(shè)置通過酌呆,F(xiàn)MBaseViewController的屬性進(jìn)行設(shè)置衡载,示例代碼如下:
FMBaseViewController *bvc = [[FMBaseViewController alloc] init];
bvc.btnBackColor = [UIColor cyanColor];
bvc.btnTitleArr = @[@"張三", @"李四", @"王五"];
bvc.indicatorColor = [UIColor yellowColor];
bvc.isIndicatorHidden = YES;
bvc.headImage_H = 100;
bvc.button_H = 30;
bvc.headImageName = @"picture_3";
bvc.isStretch = NO;
2.注意:自定義的controller 必須繼承于FMBaseTableViewController.h,
- 子控制器類型1 :FMTableViewStylePlain 初始化代碼如下:
FMT2ViewController *t2 = [[FMT2ViewController alloc] initWithTableViewStyle:FMTableViewStylePlain];
或者(default)
FMT1ViewController *t1 = [[FMT1ViewController alloc] init];
- 子控制器類型2:FMTableViewStyleGroup 初始化代碼如下:
FMT2ViewController *t2 = [[FMT2ViewController alloc] initWithTableViewStyle:FMTableViewStyleGrouped];
或者(用屬性修改)
FMT1ViewController *t2 = [[FMT1ViewController alloc] init];
t2.tableViewStyle = FMTableViewStyleGrouped;
3.頭部視圖是否可以拉伸:
isStretch 屬性(default is YES)
- 測試效果查看,在AppDelegate.m 的launch函數(shù)中添加(或替換)如下代碼:
FMBaseViewController *bvc = [[FMBaseViewController alloc] init];
self.window.rootViewController = bvc;
[self.window makeKeyAndVisible];
- 自定義子controller初始化后傳入該數(shù)組childVCArr隙袁,示例代碼如下:
FMBaseViewController *bvc = [[FMBaseViewController alloc] init];
FMT1ViewController *t1 = [[FMT1ViewController alloc] init];
FMT2ViewController *t2 = [[FMT2ViewController alloc] initWithTableViewStyle:FMTableViewStyleGrouped];
FMT3ViewController *t3= [[FMT3ViewController alloc] init];
bvc.childVCArr = @[t1, t2, t3];
子控制器最好不要超過5個痰娱, 暫不支持滑動(以后可能添加,敬請期待F惺铡)
- headView上的內(nèi)容可自定義添加梨睁,通過 ftc.headView可拿到head部分的視圖添加自己的控件。
- 支持cocoaPods 安裝
pod search FMHoverScrollKit
在Podfile中添加
pod "FMHoverScrollKit"
pod install || pod update
2018.08.01更新
增加對UICollectionView的支持娜饵,controller必須繼承自FMBaseCollectionViewController
*示例代碼
FMT1ViewController *t1 = [[FMT1ViewController alloc] init];
t1.tableViewStyle = FMTableViewStyleGrouped;
FMC1ViewController *c1 = [[FMC1ViewController alloc] init];
FMT3ViewController *t3= [[FMT3ViewController alloc] init];
效果示例 - 全collectionView
collectionSupport1.gif
效果示例 - collectionView 和 tableView混合
collectionSupport.gif
github Demo下載地址
- (第一次寫簡書坡贺,多多指教)