BBAPanelController.h 4.58 KB
//
//  BBAPanelController.h
//  BBAUIKit
//
//  Created by Guo,Zhaozhuo on 2020/3/12.
//  Copyright © 2020 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "BBAPanelItem.h"
#import "BBAPanelConfigModel.h"
#import "BBAPanelGridGroupModel.h"
#import "BBAPanelView.h"

typedef void(^BBAPanelViewCallBack)(void);

@protocol BBAGridPanelControllerDelegate <NSObject>

/// 面板item即将展示回调方法
/// @param itemView 将要展示的item的内容view
/// @param groupIndex item所在groupIndex
/// @param indexPath  item的indexPath
- (void)gridPanelWillDisplayItemView:(UIView *)itemView
                         itemInGroup:(NSInteger)groupIndex
                     itemAtIndexPath:(NSIndexPath *)indexPath;


/// 面板item即将消失回调方法
/// @param itemView 将要消失的item的内容view
/// @param groupIndex item所在groupIndex
/// @param indexPath  item的indexPath
- (void)gridPanelDidEndDisplayItemView:(UIView *)itemView
                           itemInGroup:(NSInteger)groupIndex
                       itemAtIndexPath:(NSIndexPath *)indexPath;

@end

@interface BBAPanelController : NSObject

/// 设置面板弹出后回调block(动画后)
@property (nonatomic, copy) BBAPanelViewCallBack didPanelShownCallback;

/// 设置面板消失回调block(动画后)
@property (nonatomic, copy) BBAPanelViewCallBack didPanelDismissCallback;

/// 网格布局面板的代理
@property (nonatomic, weak) id<BBAGridPanelControllerDelegate> panelDelegate;

/// 根视图
@property (nonatomic, strong, readonly) UIView *view;

/// 展示带有取消或关闭按钮样式面板 返回面板控制器示例
/// @param panelView   自定义面板视图
/// @param config      可设置圆角
+ (instancetype)presentPanelView:(UIView *)panelView
                          config:(BBAPanelConfigModel *)config;

/// 展示完全自定义内容的面板 返回面板控制器示例
/// @param customView  自定义视图
/// @param config      可设置圆角
+ (instancetype)presentCustomPanel:(UIView *)customView
                            config:(BBAPanelConfigModel *)config;

/// 隐藏当前展示的面板
/// @param anim 是否带动画
+ (void)dissmissCurrentPanel:(BOOL)anim;

/// 获取当前展示的面板控制器
+ (instancetype)currentPanelController;


/// 关闭面板
/// @param anim  是否执行消失动画
- (void)dissmissPanel:(BOOL)anim;

/// 获取面板中部内容视图(不包括顶部视图和取消按钮)
- (UIView *)getPanelContentView;

/// 当面板已展示时,添加面板挂件视图
/// @param pendantView  添加的自定义视图
/// @param offset  视图底部相对于面板顶部在 y轴 上的偏移量,0代表视图底部跟面板顶部对齐,负数代表向上偏移,正数代表向下偏移
- (void)addPanelPendantView:(UIView *)pendantView yOffset:(CGFloat)offset;

/// 移除面板挂件视图
- (void)removePanelPendantView;

#pragma mark 网格布局方法

/// 显示网格样式面板  返回面板控制器示例
/// @param headerView      自定义面板头部部分视图
/// @param gridModel       网格样式布局设置,及itemData
/// @param config          面板样式参数,用于制定主题样式以及圆角大小、背景色style
+ (instancetype)presentPanelWithHeaderView:(UIView *)headerView
                            gridPanelModel:(BBAPanelGridGroupModel *)gridModel
                                    config:(BBAPanelConfigModel *)config;


/// 显示网格样式面板  返回面板控制器示例,按需分配持有
/// @param headerView      自定义面板头部部分视图
/// @param gridModels      多组网格,网格样式布局设置,及itemData
/// @param config          面板样式参数,用于制定主题样式以及圆角大小、背景色style
+ (instancetype)presentPanelWithHeaderView:(UIView *)headerView
                           gridPanelModels:(NSArray<BBAPanelGridGroupModel *> *)gridModels
                                    config:(BBAPanelConfigModel *)config;

/// 网格布局样式下,刷新面板
- (void)reloadData;

/// 网格布局样式下,刷新面板元素
/// @param items BBAPanelItem 数组,被传入的items将被刷新,非BBAPanelItem类型传入无效
- (void)reloadItems:(NSArray<BBAPanelItem *> *)items;

/// 网格布局样式下,主动获取指定item视图
/// @return 返回指定位置的item的内容区域视图
/// @param groupIndex item所在的groupIndex
/// @param indexPath item的indexPath
- (UIView *)gridPanelItemViewAtGroup:(NSInteger)groupIndex indexPath:(NSIndexPath *)indexPath;

/// 更新面板视图变化
- (void)relayoutPanelView;

@end