IOS开发 阅读器类APP可用开源框架介绍(1)
来源:互联网 发布:软件设计师题目 编辑:程序博客网 时间:2024/06/05 18:51
首先是阅读器首页,因为打算做一个类似于win8 风格的首页,能将用户所订阅的资讯简洁大方的展现出来, 可以参考一个DragDemo ,它主要实现了对按钮的拖动,用可以根据自己的喜好将不同的button放在不同的位置。
主要的代码如下:
//用来保存button上一次移动的顺序 _tagsArray = [[NSMutableArray alloc]initWithCapacity:8]; for (NSInteger i = 0; i< 8; i++) { NSNumber *n = [NSNumber numberWithInteger:i]; [_tagsArray addObject:n]; } NSMutableArray *array = [[NSUserDefaults standardUserDefaults]objectForKey:@"Array"]; if (array != NULL) { // 取出保存的button顺序 _tagsArray = array; } // 创建button for (NSInteger i = 0;i<8;i++) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.backgroundColor = [UIColor lightGrayColor]; btn.frame = CGRectMake(50+(i%2)*100, 64+(i/2)*100, 90, 90); btn.tag = [[_tagsArray objectAtIndex:i] integerValue]; btn.titleLabel.font = [UIFont boldSystemFontOfSize:20]; [btn setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal]; [self.view addSubview:btn]; UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(buttonLongPressed:)]; [btn addGestureRecognizer:longGesture]; [self.itemArray addObject:btn]; }}
// 长按手势的触发事件- (void)buttonLongPressed:(UILongPressGestureRecognizer *)sender{ UIButton *btn = (UIButton *)sender.view; NSInteger selInt = btn.tag; NSLog(@"选中的button是:%d",selInt); // if (sender.state == UIGestureRecognizerStateBegan) { // 得到手指所按的点 和 button的中心点 startPoint = [sender locationInView:sender.view]; originPoint = btn.center; [UIView animateWithDuration:Duration animations:^{ //长按后出现放大和半透明效果 btn.transform = CGAffineTransformMakeScale(1.1, 1.1); btn.alpha = 0.7; }]; } else if (sender.state == UIGestureRecognizerStateChanged) { //得到手指移动后的点 CGPoint newPoint = [sender locationInView:sender.view]; CGFloat deltaX = newPoint.x-startPoint.x; CGFloat deltaY = newPoint.y-startPoint.y; //button也跟着手指移动 btn.center = CGPointMake(btn.center.x+deltaX,btn.center.y+deltaY); // 返回值是手指移动到下一个按钮所在区域时下一个按钮的tag值,如果手指所在区域不在另外一个按钮上时,则返回-1, NSInteger index = [self indexOfPoint:btn.center withButton:btn]; if (index<0) { contain = NO; } else { // 再将button的tag值放入数组 for (int i = 0 ; i< 8; i++) { NSNumber *numb = [_tagsArray objectAtIndex:i]; [_tagsArray addObject:numb]; } //删掉数组中的前8个旧的tag值,保留新的tag值 NSRange range = NSMakeRange(0, 8); [_tagsArray removeObjectsInRange:range]; // 在数组中交换button的tag值对应在数组中的下标 NSNumber *mmm_1 = [NSNumber numberWithInteger:selInt]; NSNumber *mmm_2 = [NSNumber numberWithInteger:index]; NSInteger nnInt_1 = [_tagsArray indexOfObject:mmm_1]; NSInteger nnInt_2 = [_tagsArray indexOfObject:mmm_2]; [_tagsArray exchangeObjectAtIndex:nnInt_1 withObjectAtIndex:nnInt_2]; // 在本地保存记录tag值顺序的数组 [[NSUserDefaults standardUserDefaults] setObject:_tagsArray forKey:@"Array"]; [[NSUserDefaults standardUserDefaults] synchronize]; [UIView animateWithDuration:Duration animations:^{ // 交换选中的button和移动后指尖处的button CGPoint temp = CGPointZero; UIButton *button = _itemArray[index]; temp = button.center; button.center = originPoint; btn.center = temp; originPoint = btn.center; contain = YES; }]; } } else if (sender.state == UIGestureRecognizerStateEnded) { [UIView animateWithDuration:Duration animations:^{ // 将button的形状和透明度还原 btn.transform = CGAffineTransformIdentity; btn.alpha = 1.0; // 如果指尖处没有button,则移动的button回到原来位置 if (!contain) { btn.center = originPoint; } }]; } }
// 返回值是手指移动到下一个按钮所在区域时下一个按钮的tag值,如果手指所在区域不在另外一个按钮上时,则返回-1,- (NSInteger)indexOfPoint:(CGPoint)point withButton:(UIButton *)btn{ for (NSInteger i = 0;i<_itemArray.count;i++) { UIButton *button = _itemArray[i]; if (button != btn) { if (CGRectContainsPoint(button.frame, point)) { return i; } } } return -1;}
代码虽然很短,但是实用性很强,可以修改的地方很多,比如在长按手势和可以给button的左上角加上删除的图标,点击后可以删除按钮。在所有的按钮视图后可以加上一个空白的按钮,点击后可以添加按钮。所有按钮可以加在一个 UIScrollView 上,这样可以加上更多的按钮。
0 0
- IOS开发 阅读器类APP可用开源框架介绍(1)
- IOS开发 阅读器类APP可用开源框架介绍(2)
- IOS开发 阅读器类APP可用开源框架介绍(3)
- ios开发 阅读器APP 的开发
- iOS 从0到1搭建高可用App框架
- iOS 从0到1搭建高可用App框架
- iOS 从0到1搭建高可用App框架
- iOS 从0到1搭建高可用App框架
- iOS 从0到1搭建高可用App框架
- iOS 从0到1搭建高可用App框架
- 可用于电子书阅读器的开源阅读器软件项目
- iOS 从0到1搭建高可用App框架(二)
- iOS 从0到1搭建高可用App框架(二)
- iOS 从0到1搭建高可用App框架(二)
- HTML5 移动Web App阅读器-3(开发流程介绍、需求分解和技术选型)
- iOS开发框架介绍(一)---iOS开发介绍
- iOS开发框架介绍(一)---iOS开发介绍
- ios 阅读器开发
- 求集合的所有子集
- Ubuntu新建账户终端显示不正常问题
- 谱聚类算法详解
- 西红柿烧茄子---贝太厨房
- Linux 性能监控、测试、优化工具
- IOS开发 阅读器类APP可用开源框架介绍(1)
- Xshell登录Ubuntu12.04
- javaweb--Filter全站压缩
- 卡特兰数及其应用
- js去掉字符串前后空格的五种方法
- ListView中convertView和ViewHolder的工作原理
- 黑马程序员------object-c简史及对比基本语法与其他语言的不同
- Vim的Python编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)
- Ural1049 基础数论