BBACommonPopupMenu.h 9.99 KB
//
//  BBACommonPopupMenu.h
//  BBAUIKit
//
//  Created by Ning,Liujie on 2020/7/15.
//  Copyright © 2020 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BBACommonPopupMenuItem.h"
#import "BBACommonPopupMenuDefine.h"

NS_ASSUME_NONNULL_BEGIN

typedef void(^BBACommonPopupMenuDismissBlock)(void);

@interface BBACommonPopupMenu : NSObject

/// popupmenu消失回调 (点击menu内的item后消失同样会执行次回调)
@property (nonatomic, copy) BBACommonPopupMenuDismissBlock dismissBlock;

/**
* 展示 popupMenu
*
* 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示

* @param itemArray 列表的数据
* @param targetView 传入点击View,根据传入的View,进行弹框的布局
* @param itemClickBlock item点击的回调事件
*/
+ (instancetype)showWithItem:(NSArray <BBACommonPopupMenuItem *> *)itemArray
                  targetView:(UIView *)targetView
                   itemClick:(void(^)(NSInteger index))itemClickBlock;

/**
 * 展示 popupMenu
 *
 * 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示
 * 如果配置箭头方向,则优先向配置的箭头方向展示,如果该方向展示不下,则尝试向其它方向展示,同上面规则
 *
 * @param itemArray 列表的数据
 * @param targetView 需要显示在传入的View 的上方或者下方,取传入view 的中点的上边缘或者下边缘确定箭头的显示位置,弹出弹框,如果没有箭头,则基于中点位置,进行布局
 * @param showArrow 是否需要箭头
 * @param itemClickBlock item点击的回调事件
 */
+ (instancetype)showWithItem:(NSArray <BBACommonPopupMenuItem *> *)itemArray
                  targetView:(UIView *)targetView
                   showArrow:(BOOL)showArrow
                   itemClick:(void(^)(NSInteger index))itemClickBlock;
/**
 * 展示 popupMenu
 *
 * 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示
 * 如果配置箭头方向,则优先向配置的箭头方向展示,如果该方向展示不下,则尝试向其它方向展示,同上面规则
 *
 * @param itemArray 列表的数据
 * @param targetView 传入点击View,根据传入的View,进行弹框的布局
 * @param showArrow 是否需要箭头
 * @param showMask 是否需要蒙层,不透明度50%
 * @param itemClickBlock item点击的回调事件
 */
+ (instancetype)showWithItem:(NSArray <BBACommonPopupMenuItem *> *)itemArray
                  targetView:(UIView *)targetView
                   showArrow:(BOOL)showArrow
                    showMask:(BOOL)showMask
                   itemClick:(void(^)(NSInteger index))itemClickBlock;

/**
 * 展示 popupMenu
 *
 * 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示
 * 如果配置箭头方向,则优先向配置的箭头方向展示,如果该方向展示不下,则尝试向其它方向展示,同上面规则
 *
 * @param itemArray 列表的数据
 * @param targetView 传入点击View,根据传入的View,进行弹框的布局
 * @param showArrow 是否需要箭头
 * @param arrowDirection 箭头方向,传入对应的的方向,内部会优先向传入的方向弹出,如果弹出的方向,展示不下,会进行展示方向判断,展示规则同弹框展示规则
 * @param showMask 是否需要蒙层,不透明度50%
 * @param itemClickBlock item点击的回调事件
 */
+ (instancetype)showWithItem:(NSArray <BBACommonPopupMenuItem *> *)itemArray
                  targetView:(UIView *)targetView
                   showArrow:(BOOL)showArrow
              arrowDirection:(BBACommonPopupMenuArrowDirection)arrowDirection
                    showMask:(BOOL)showMask
                   itemClick:(void(^)(NSInteger index))itemClickBlock;

/**
 * 展示 popupMenu
 *
 * 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示
 * 如果配置箭头方向,则优先向配置的箭头方向展示,如果该方向展示不下,则尝试向其它方向展示,同上面规则
 *
 * @param itemArray 列表的数据
 * @param targetView 传入点击View,根据传入的View,进行弹框的布局
 * @param showArrow 是否需要箭头
 * @param arrowDirection 箭头方向,传入对应的的方向,内部会优先向传入的方向弹出,如果弹出的方向,展示不下,会进行展示方向判断,展示规则同弹框展示规则
 * @param showMask 是否需要蒙层,不透明度50%
 * @param positionOffset 位置偏移值
 * @param offsetBaseline 默认不进行处理,选择不同的基线,以选择的基线,正数向右偏移,负数向左偏移 例如:以左边基线为例,设置偏移值,就是 该弹框的x 值 最小边距 + 偏移值
 * @param itemClickBlock item点击的回调事件
 */
+ (instancetype)showWithItem:(NSArray <BBACommonPopupMenuItem *> *)itemArray
                  targetView:(UIView *)targetView
                   showArrow:(BOOL)showArrow
              arrowDirection:(BBACommonPopupMenuArrowDirection)arrowDirection
                    showMask:(BOOL)showMask
              positionOffset:(CGFloat)positionOffset
              offsetBaseline:(BBACommonPopupMenuPositionOffsetBaseline)offsetBaseline
                   itemClick:(void(^)(NSInteger index))itemClickBlock;

/**
* 展示 popupMenu
*
* 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示

* @param customView 自定义的视图
* @param targetView 传入点击View,根据传入的View,进行弹框的布局
 */
+ (instancetype)showWithCustomView:(UIView *)customView
                        targetView:(UIView *)targetView;

/**
* 展示popupMenu
*
* 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示
 如果配置箭头方向,则优先向配置的箭头方向展示,如果该方向展示不下,则尝试向其它方向展示,同上面规则
*
* @param customView 自定义的视图
* @param targetView 传入点击View,根据传入的View,进行弹框的布局
* @param showMask 是否需要蒙层,不透明度50%
* @param showArrow 是否需要箭头
*/
+ (instancetype)showWithCustomView:(UIView *)customView
                        targetView:(UIView *)targetView
                          showMask:(BOOL)showMask
                         showArrow:(BOOL)showArrow;

/**
* 展示popupMenu
*
* 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示
 如果配置箭头方向,则优先向配置的箭头方向展示,如果该方向展示不下,则尝试向其它方向展示,同上面规则
*
* @param customView 自定义的视图
* @param targetView 传入点击View,根据传入的View,进行弹框的布局
* @param showMask 是否需要蒙层,不透明度50%
* @param showArrow 是否需要箭头
* @param arrowDirection 箭头方向,传入对应的的方向,内部会优先向传入的方向弹出,如果弹出的方向,展示不下,会进行展示方向判断,展示规则同弹框展示规则
*/
+ (instancetype)showWithCustomView:(UIView *)customView
                        targetView:(UIView *)targetView
                          showMask:(BOOL)showMask
                         showArrow:(BOOL)showArrow
                    arrowDirection:(BBACommonPopupMenuArrowDirection)arrowDirection;

/**
* 展示popupMenu
*
* 弹框展示规则:弹框默认向下展示,如果下面展示不下,会向上展示,如果展示不下,会比较向上和向下的距离,向距离大的方向展示
 如果配置箭头方向,则优先向配置的箭头方向展示,如果该方向展示不下,则尝试向其它方向展示,同上面规则
*
* @param customView 自定义的视图
* @param targetView 传入点击View,根据传入的View,进行弹框的布局
* @param showMask 是否需要蒙层,不透明度50%
* @param showArrow 是否需要箭头
* @param arrowDirection 箭头方向,传入对应的的方向,内部会优先向传入的方向弹出,如果弹出的方向,展示不下,会进行展示方向判断,展示规则同弹框展示规则
* @param positionOffset 位置偏移值
* @param offsetBaseline 默认不进行处理,选择不同的基线,以选择的基线,正数向右偏移,负数向左偏移 例如:以左边基线为例,设置偏移值,就是 该弹框的x 值 最小边距 + 偏移值
 
*/
+ (instancetype)showWithCustomView:(UIView *)customView
                        targetView:(UIView *)targetView
                          showMask:(BOOL)showMask
                         showArrow:(BOOL)showArrow
                    arrowDirection:(BBACommonPopupMenuArrowDirection)arrowDirection
                    positionOffset:(CGFloat)positionOffset
                    offsetBaseline:(BBACommonPopupMenuPositionOffsetBaseline)offsetBaseline;

/**
* 更新展示的popupMenu的列表
*
* @param itemArray 列表的数据
*/
- (void)updateWithItems:(NSArray <BBACommonPopupMenuItem *> *)itemArray;

/**
* 更新展示的popupMenu的自定义View
*
* @param customView 自定义的视图
*/
- (void)updateWithCustomView:(UIView *)customView;

/**
* 外部更新了已加入列表item数据或者自定义的视图,需要刷新界面,调用该方法进行界面刷新
*
*/
- (void)reloadData;

/**
* 隐藏popupMenu
*
*/
- (void)hideWithAnimation:(BOOL)isAnimation;

/**
* 是否有弹框展示
*
*/
+ (BOOL)isShow;

@end

NS_ASSUME_NONNULL_END