• iOS 中的断点续传

    关键点 实现断点续传的关键是自定义http request的头部的range域属性 Range头域可以请求实体的一个或者多个子范围。例如, 表示头500个字节:bytes=0-499 表示第二个500字节:bytes=500-999 表示最后500个字节:bytes=-500 表示500字节以后的范围:bytes=500- 第一个和最后一个字节:bytes=0-0,-1 同时指定几个范围:bytes=500-600,601-999 基本思想 1、获取已下载文件的大小,用来确定下载的文件从什么地方开始续传(即获取range属性的范围); 2、设置http request请求头文件,要包含range属性; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0f]; // 设置请求头文件 NSString *rangeValue = [NSString stringWithFormat:@"bytes=%llu-", from]; [request addValue:rangeValue forHTTPHeaderField:@"Range"]; 3、 发起http下载请求; 具体实现 可以用iOS自带的NSURLConnection,也可以使用第三方如AFNetWorking实现。 NSURLConnection实现方法; AFNetworking实现方法; TCBlobDownload; 参考资料 1.ios 实现断点续传 一 nsurlconnection; 2.IOS Http断点续传浅析; 3.iOS开发网络编程之断点续传-NSURLConnection; 4.AFNetworking实现程序重新启动时的断点续传;


  • CGGeometry

    CGGeometry 是一个 Quartz 2D 框架中非常有用且好用的处理几何问题的基本组件,这里列出一些它的方法并简单说明如何使用。 变换 CGRectOffset CGRectOffset: 返回一个原点在源矩形基础上进行了偏移的矩形。 CGRect CGRectOffset( CGRect rect, //源矩形 CGFloat dx, //x方向偏移距离 CGFloat dy //y方向偏移距离 ) 为什么要用 CGRectOffset ?NSHipster解释如下: 它不仅能让你在同时改变水平和垂直位置的时候减少一行代码,更重要的是,它所表示的平移比直接分开操作原点的值更具有几何意义。 CGRectInset CGRectInset: 返回一个与源矩形共中心点的,或大些或小些的新矩形。 CGRect CGRectInset( CGRect rect, //源矩形 CGFloat dx, // x方向左边减去dx,右边也减去dx(共2dx) CGFloat dy // y方向上边减去dy,右边也减去dy(共2dy) ) 如果用 CGRectInset 作为缩放矩形的快捷方法,一般通用的做法是嵌套调用CGRectOffset,把CGRectInset的返回值作为CGRectOffset的参数。 如: CGRect frame = CGRectOffset(CGRectInset(rect,...


  • KVC 简介

    目录 什么是KVC? 为什么要用KVC? KVC用法介绍. 什么是KVC? KVC是cocoa的一部分,可以使我们在访问对象属性的时候不需要再调用 setter 和 getter存取器,比如我们可以用 [object valueForKey:property]来访问object对象中的property属性,也能用 [object setValue:value forKey:property]来给object对象中的property属性赋值。为了达到这种目的,对象需要用特定的方式来命名方法,这种命名约定就成为KVC. 为什么要用KVC 使用KVC能让我们在运行时而非编译时决定访问哪个属性,从而得到更灵活和更易于重用的对象,同时也能帮助我们减少代码量,通过KVC,还能实现cocoa中更为强大的KVO功能。 KVC用法介绍 我们定义一个对象如下 @interface People : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *age; @property (nonatomic, strong) Car *car; @end 访问对象属性 我们在获取people对象的name属性的值的时候,就可以通过KVC来获取: NSString *name = [people valueForKey:@"name"]; 此代码基本等同于下面代码 NSString *name = people.name;...


  • UITableView 相关

    问题描述: UITableView deleteRowsAtIndexPaths:withRowAnimation:在使用的时候,当你删除该行的时候,tableView并不会reload,所以该 行的下一行的indexPath并没有改变,当下一行为最后一行的时候,你的Model里的数据在删除的时候调用[arrayremoveObjectAtIndex:indexPath.row] 时候会报错:数组越界。 解决办法: 假如你直接使用[tableView reloadData],那么就看不到 tableView的动画效果了,所以不能用[tableView reloadData];代替的方法是使用 reloadSections:withRowAnimation:方法。 问题描述: 如何设置UITableViewCell accessoryType的颜色? 解决办法: cell.tintColor = [UIColor greenColor]; 注意:类型为UITableViewCellAccessoryDisclosureIndicator 的不能通过这种方法更改,其颜色只能灰色。 问题描述: 如何获取UITableViewCell 在TableView中的frame? 解决办法: CGRect cellFrame = [_tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]]; 问题描述: 在使用Grouped UITableView的时候,如何去掉上面默认的空白 解决办法: _tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, _tableView.bounds.size.width, 0.01f)]; 问题描述 iOS8 如何如何使 tableView cell 自适应高度...


  • UIKit 动力学(UIKit Dynamics)学习

    简介 UIKit dynamics(UIKit动力学)是UIKit的一套动画和交互体系。和我们用的CoreAnimation或者UIView animations一样,只不过UIKit 动力学将现实世界动力驱动的动画引入了UIKit,比如重力,铰链连接,碰撞,悬挂、吸附等效果。 基本概念和元素 UIdynamicItem: 实现了UIDynamicItem委托的对象,它是动画的执行者,相关的物理属性也是加在这个对象上,由于iOS7之后,UIView和UICollectionViewLayoutAttributes类默认实现了该协议,所以UIView就可以看作是一个UIdynamicItem; UIDynamicBehavior:动力行为的描述,用来指定UIDynamicItem应该如何运动,即定义适用的物理规则。一般我们使用这个类的子类对象来对一组UIDynamicItem应该遵守的行为规则进行描述,在iOS7中,系统默认提供了如下的动力行为: 1、UIGravityBehavior:重力行为 2、UICollisionBehavior:碰撞行为 3、UIAttachmentBehavior:铰链行为,两个物体连接的状态,可以模拟无形变或者弹性行遍的情况 4、UISnapBehavior:吸附行为,将UIView通过动画吸附到某个点上。 5、UIPushBehavior:推行为,比如为一个UIView施加一个力的作用,我们可以指定力的大小,方向和租用点等信息。 6、UIDynamicItemBehavior:动力学辅助元素行为,系统有一组自定义的默认值 UIDynamicAnimator;动画的播放者,动力行为(UIDynamicBehavior)的容器,添加到容器内的行为将发挥作用; ReferenceView:力学参考系,只有当想要添加力学的UIView是ReferenceView的子view时,动力UI才发生作用,比如你可以把ViewController的view作为ReferenceView; 代码示例(一个简单的重力行为) /** * 初始化subView */ - (void)initSubView { _subView = [[UIView alloc] initWithFrame:(CGRect){ .origin.x = 100.0f, .origin.y = 108.0f, .size.width = 100.0f, .size.height = 100.0f, }]; _subView.backgroundColor = [UIColor lightGrayColor]; [self.view addSubview:_subView]; }...