这个也是来自于项目中的一个需求,点击一个按钮,可以像开花一样散开多个菜单选项栏,点击不同的菜单选项栏会响应不同的点击事件,需要配上散开/收起的动画效果。为了满足这个需求,封装了一个
FKFlowerMenu
花型菜单选择工具。
下载地址:github下载
FKFlowerMenuDemo运行结果.jpeg支持功能
- 自定义控制菜单选择项的数目
- 自定义控制菜单选项栏的展开角度,散开距离
- 菜单的主按钮是否支持动画
- 菜单的展开方向支持四个方向
使用
FKFlowerMenuDemo
是该工具的一个使用范例,如果需要将该工具使用到自己的工程中,只用把demo中到FKFloweMenu
文件夹中的文件引入工程就可以了。
FKFloweMenu
中包含FKFlowerMenuItem
和FKFloweMenu
文件。
FKFlowerMenuItem
文件是花型菜单工具展开之后的选择按钮项,选择按钮项支持自定义图片,大小,响应事件。
FKFloweMenu
文件夹中FKFlowerMenuBtn
文件就是花型菜单工具控制展开/收起的中心按钮,它属于UIButton
类型,使用者只需要创建一个Button
并继承于它,就可以轻松的使用这个花型菜单工具了。
设置FKFlowerMenuBtn各项属性
Button
创建成功并继承FKFlowerMenuBtn
,确定了中心按钮的位置,我们就完成了使用的第一步。
下面我们需要来设置中心按钮的各项属性。
/**散开的最大距离*/
@property (nonatomic , assign) CGFloat maxLength;
/**散开的最大角度*/
@property (nonatomic , assign) CGFloat maxRadian;
/**散开的方向*/
@property (nonatomic , assign) DirectionWay derectionWay;
/**是否需要旋转的动画效果*/
@property (nonatomic , assign) BOOL needAnimation;
maxLength
用来控制展开的选项按钮距离中心按钮圆心的距离。
maxRadian
用来控制花型菜单展开后,最外面的两个选项按钮所呈的最大角度。
needAnimation
中心按钮是否需要旋转动画,目前旋转动画的动作并没有自定义,支持点击后顺时针45度旋转(展开动画)/逆时针45度旋转(收起动画)。如果不需要的朋友可以直接忽略这个属性,或者设置为NO
。
derectionWay
用来控制菜单按钮的展开方向,目前支持4个方向,使用者在确认中心按钮的位置后,可根据需要设置方向。由4个枚举变量来控制。
typedef NS_ENUM (NSInteger, DirectionWay) {
OnTheTopLeft = 0, //左上方向
OnTheTopRight, //右上方向
OnTheBottomLeft, //左下方向
OnTheBottomRight, //右上方向
};
添加菜单选项按钮
设置完中心按钮的各种属性之后,我们需要创建菜单选择按钮。
- (id)initWithImage:(UIImage *)image withBounds:(CGFloat)bounds selectedBlock:(SelectedBlock)selectedBlock;
通过上面这个方法设置选择按钮的显示图片,大小,以及点击的响应事件。
将创建好的选择按钮添加至数组,以数组的形式和中心按钮作关联。
/**设置散发出来的子item*/
- (void)addSubItems:(NSArray<FKFlowerMenuItem*>*)itemArr;
这是FKFlowerMenuBtn
用来添加FKFlowerMenuItem
的方法,添加成功的选择按钮会和中心按钮显示在一个视图层级上。
到这一步,中心按钮和选择按钮的关联和设置就已经完成了,运行起我们的工程,就可以开心的使用花型菜单了。……^ _ ^
完整的设置过程
- (void)configureBtn {
FKFlowerMenuItem *item0 = [[FKFlowerMenuItem alloc] initWithImage:[UIImage imageNamed:@"add_mytask_askr.png"] withBounds:30 selectedBlock:^{
NSLog(@"第1个");
}];
FKFlowerMenuItem *item1 = [[FKFlowerMenuItem alloc] initWithImage:[UIImage imageNamed:@"Task_Addphoto_Btn.png"] withBounds:30 selectedBlock:^{
NSLog(@"第2个");
}];
FKFlowerMenuItem *item2 = [[FKFlowerMenuItem alloc] initWithImage:[UIImage imageNamed:@"add_mytask_askr.png"] withBounds:30 selectedBlock:^{
NSLog(@"第3个");
}];
self.leftFlowersBtn.maxLength = 75;
self.leftFlowersBtn.maxRadian = M_PI_4 * 3 ;
self.leftFlowersBtn.derectionWay = OnTheBottomRight;
[self.leftFlowersBtn addSubItems:@[item0,item1,item2]];
}
本文主要讲解了FKFlowerMenu的使用方法,具体可以参考 github下载 地址中的Demo,也欢迎各位朋友留言指正,指点。
网友评论