尴尬:图片抽搐了,下载运行看吧...
- 自适应方向,自适应箭头指示位置。
- 新增追加菜单项:在原有菜单基础上,增加一个或者多个菜单按钮。
- 更新菜单项内容:在原有菜单基础上,更新所有的菜单项内容。(
也可以局部更新
)。 - 同样都是类方法实现,不需要显示的创建对象。
⚠️ 使用方法依旧只需要传递内容数组,无需其他多余步骤。- (
⚠️ 注:所有的方法都是类方法,直接用类名调用即可,并留意文档最后的的参数说明
)
-
传递参数说明dataArray -- 由菜单文字内容及图片名称组成的**
字典数组
**__weak __typeof(&*self)weakSelf = self; /** * 创建menu */ [CommonMenuView createMenuWithFrame : CGRectMake(x, y, width, height) target : self.navigationController dataArray : dataArray itemsClickBlock : ^(NSString *str, NSInteger tag) { /* do something */ } backViewTap : ^{ /* 点击背景遮罩view后的block,可自定义事件 */ }];
-
方法名称:
+ (void)showMenuAtPoint:(CGPoint)point;
* **说明:**
_根据菜单展示的位置,指示箭头默认适应点击坐标,高度超出屏幕,菜单自动翻转。_
* **调用示例:**
```Objective-C
// point,展示的坐标
+ (void)showMenuAtPoint:(CGPoint)point;
-
方法名称:
[CommonMenuView showMenuAtPoint:point];
-
说明:
在原有菜单项个数基础上,**追加
的菜单项(例如:原有菜单中有三项,需要增加第四,第五...项
等),可以实现动态增加
**菜单项` -
调用示例:
//拼接字典数组,这里可以使用 NSDictionary *addDict = @{@"imageName" : @"icon_button_recall", @"itemName" : @"新增项" }; NSArray *newItemArray = @[addDict]; // 调用:参数newItemArray :追加的菜单项字典拼接成的数组 [CommonMenuView appendMenuItemsWith:newItemArray];
-
方法名称:
+ (void)updateMenuItemsWith:(NSArray *)newItemsArray;
-
说明:
**更新修改所有
菜单的内容,根据传入的字典数组
**内容,动态更新菜单项,只需要传递数组即可,其他无需多虑` -
调用示例:
- (IBAction)removeMenuItem:(id)sender { /** * 更新菜单: _dataArray是控制器中全局字典数组,存的是菜单项图标和功能名称 */ [CommonMenuView updateMenuItemsWith:_dataArray]; }
-
方法名称:
/* 隐藏菜单 */ + (void)hidden; /* 移除菜单 */ + (void)clearMenu;
-
说明:
1 .只要程序不退出,只要不执行**clearMenu
方法,创建的菜单对象就一直在内存中。若有在其他控制器利用类方法调用并展示,一旦菜单项不同,请调用updateMenuItemsWith:
**方法更新菜单项目。
2 .隐藏:对菜单的size进行缩小,考虑到当控制器始终存在时,即用户**没有进行push,或者退出app
的操作(pop的情况下面会提到)时,就没必要移除菜单,避免需要菜单时的反复创建,此时应调用hidden方法
**
3 .移除:从父试图remove掉,当用户进行**pop
,或者退出app
的操作(控制器已经被销毁,就没必要保留菜单并占用内存空间了)时,应当调用clearMenu
**方法
- 调用示例:
[CommonMenuView hidden]; // 隐藏菜单 [CommonMenuView clearMenu]; // 移除菜单
- fame: 菜单坐标和宽高
(非必填,高度自适应,width默认120)
- target:菜单将要展示的所在控制器
(参数必填)
- dataArray:菜单项内容
(必填参数)
- itemsClickBlock:点击菜单的block回调,回调菜单文字和下标
- backViewTap:半透明背景点击回调
- demo在Nav展示时候,fram的origin是自己写死的,至今没有找到能获取nav上按钮所在point的方法,如果大神们有好方法,或者对这个demo有改进意见,请发邮件:[email protected],不胜感激~🙏🙏🙏