iOS 菜单显示一种方式
来源:互联网 发布:淘宝好评返现短信模板 编辑:程序博客网 时间:2024/06/05 18:04
前言
前几天在群里看见一个朋友说这种菜单用哪个控件写比较好,有的人说用UICollectionView,有的说用UIButton自己计算。我今天上午正好暂时没接口。写了一下,最后还是感觉用UIButton比较好用,没有必要用UICollectionView。写个Demo,大家如果需要这个思路可以看一下。
Demo地址
正文
最重要的一个方法就是怎么让菜单按钮显示正常:
/** * 数据显示 */- (void)loadData:(UIView *)bgView whatArray:(NSMutableArray *)array{ __block CGFloat weakX = locaX; __block CGFloat weakY = locaY; for(int i = 0;i < array.count;i++) { [UIView animateWithDuration:0.2 delay:0.1 usingSpringWithDamping:0.5 initialSpringVelocity:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ //创建按钮 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.tag = i+1; //判断是否是选中的数组 BOOL isS = NO; if (array.count == self.sMenuArray.count) { isS = YES; for(int i=0; i<array.count;i++) { NSString *str1 = array[i]; NSString *str2 = self.sMenuArray[i]; if (![str1 isEqualToString:str2]) { isS = NO; break; } } } if (isS == YES) { btn.tag = i+1+100; } [btn setTitle:array[i] forState:UIControlStateNormal]; btn.titleLabel.font = [UIFont systemFontOfSize:14]; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [btn addTarget:self action:@selector(doSomething:) forControlEvents:UIControlEventTouchUpInside]; //计算btn的宽度 CGSize btnSize = [array[i] boundingRectWithSize:CGSizeMake(self.view.frame.size.width, 30) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} context:nil].size; CGFloat btnW = btnSize.width + 2 * locaX; CGFloat btnH = 30; //判断一下按钮是否超出 if ((weakX + btnW) >= self.view.frame.size.width - locaX) { weakX = locaX; weakY +=btnH + 5; } btn.frame = CGRectMake(weakX, weakY, btnW, btnH); //判断下一次xy位置 weakX += btnW + locaX; if (weakX >= self.view.frame.size.width - locaX) { weakX = locaX; weakY += btnH + 5; } [bgView addSubview:btn]; btn.layer.cornerRadius = btn.frame.size.width /10; btn.layer.masksToBounds = YES; btn.layer.borderWidth = 1; btn.layer.borderColor = [UIColor colorWithWhite:0.000 alpha:0.105].CGColor; } completion:^(BOOL finished) { }]; }}
知道了如何显示菜单按钮之后,其他的就简单了。点击菜单按钮把它移动到常用菜单处:
/** * 按钮事件 * * @param sender <#sender description#> */- (void)doSomething:(UIButton *)sender{ //判断按钮处于哪个区域 if (sender.tag<100) { // 从menuarray取出这个数据放到smenuarray里面 NSInteger index = sender.tag - 1; [self.sMenuArray addObject:self.menuArray[index]]; [self.menuArray removeObjectAtIndex:index]; }else { // 从smenuarray取出这个数据放到smenuarray里面 NSInteger index = sender.tag - 1 - 100; [self.menuArray addObject:self.sMenuArray[index]]; [self.sMenuArray removeObjectAtIndex:index]; } //数据重新加载,把上一次数据显示去除 for(UIView *view in [self.dataView subviews]) { [view removeFromSuperview]; } for (UIView *view in [self.selectedView subviews]) { [view removeFromSuperview]; } [self loadData:self.dataView whatArray:self.menuArray]; [self loadData:self.selectedView whatArray:self.sMenuArray];}
在代码里我已经把每一步操作说的很清楚了,大家如果感兴趣可以去下载运行一下。
运行截图:
结语
我是程序员,我为自己代言
0 0
- iOS 菜单显示一种方式
- 一种屏蔽系统下拉菜单的方式
- 【工具代码】JavaScript实现右键菜单的一种方式
- Android弹出式菜单-一种简单的实现方式
- IOS 长按显示圆形菜单
- iOS tableViewCell点击后显示下拉菜单
- iOS tableViewCell点击后显示下拉菜单
- iOS一种多线程的管理方式——GCD
- iOS 开发系列:CoreData Object 变成 Fault 的一种方式
- iOS中另外一种多线程实现方式NSOperation
- iOS 拨打电话四种方式总结(推荐最后一种)
- ios dispatch_semaphore是GCD用来同步的一种方式
- 菜单显示
- iOS中搜索条下来菜单怎么自动显示
- ios 自定义菜单显示内容(可拖拽排序collectionView
- 一种jquery的菜单风格
- 换一种方式生活
- 一种缺陷分类方式
- hdu 2822(BFS+优先队列)
- delphi 获取当前进程的cpu占用率
- 热部署原理和实例
- android Bitmap 处理
- FILE文件流的中fopen、fread、fseek、fclose的使用
- iOS 菜单显示一种方式
- Eclipse搭建Maven工程集成Spring4+Hibernate5
- Android应用程序内存优化
- IONIC 竖屏显示(屏幕不旋转)
- file_get_contents & curl mark一下
- php 设计模式_命名空间的巧用
- 新的微单到手
- Android Studio的基本设置
- 正则表达式