跳至主要内容

博文

目前显示的是 二月, 2013的博文

ios 开源修改 上拉更多

EGOTableViewPullRefresh 是一个很常用的下拉刷新的组件,我们可以直接把这个组建改造成“上拉更多”,由于网上已经有很多高人修改过了,所以我这里就稍稍总结一下需要修改的地方。 egoRefreshScrollViewDidScroll:这个方法是通过滚动条的变化来做状态记录和状态转换,用于显示不同的提示文字。可以对状态控制的参数做相应的调整 egoRefreshScrollViewDidEndDragging:这个方法是松开滚动条时被调用的,用于检测当前状态是否满足刷新条件,再选择促发刷新并更新状态为刷新中。 egoRefreshScrollViewDataSourceDidFinishedLoading:这个方法是完成刷新时被调用的,这里会讲所有界面效果还原并把当前的界面状态修改为还原状态。 以上的几个方法只要把一些(x,y)的控制修改成相反的状态,基本就能完成“上拉更多”的修改。再衍生出去就有左右拉刷新更多的修改方法。

iOS 开放平台

由于之前做过几个开放平台的分享功能,所以小小做点总结 新浪微博 新浪微博的开放平台是我第一个用的开放平台,所以第一印象就是新浪微博的open api是最标准的。由于我都忘了用的是什么版本,所以就只对我所使用的版本做总结。 新浪微博的登陆api是使用异步的方式,所以只需要调用 login 这个方法和给定一个回调的delegate。值得注意的是,login这个方法会做应用跳转,跳到新浪微博的app中做第三方授权,这样就会让用户跳出应用,我觉得用户体验相当不好,于是我把跳转代码注释掉,用微博的弹出页面来登陆。 新浪微博有一个发送微博并发送图片url的接口,不过,这个接口是需要另外申请权限。要不然只能用上传图片发微博的接口。 腾讯微博 腾讯微博的open api连界面都完成了,基本可以直接接入自己的app。但是对与我们的应用,直接用这个界面使得界面风格相当奇葩。另外,这套open api封装得很差,所以需要对它进行一点修改。 修改app_key和app_secret为自己应用的字符串 把open api中没用的图片去掉,这样可以有效减少app打包后的大小 微信 微信的分享方式是可以分享给朋友或者分享到朋友圈,因此需要做应用跳转,这样就不需要控制登录状态了,这样微信的分享就很简单了,需要注意的就只有一个地方。 分享带图片的微信,那么就需要提供图片的缩略图,而图片的缩略图会被限制到32KB。然而对于一副图片,我并不能控制它的大小进行压缩,于是我就统一把图片的分辨率压缩到300*300,这样我们应用内产生的所有图片都能分享出去。 前段时间看到放翁把各种开放平台的接入代码写好并开源出来,有空就去参详一下。最后,我认为,用户只会在用得很爽的时候才会使用分享模块。 so: 应该在所有地方都能让用户使用分享模块,但应该让这个按钮放在一些隐蔽的地方。 一旦用户登陆过的开放平台必须想方设法把token记录下来,并且需要默认让用户分享到所有微博,减少用户点击流程。

iOS UI层总结(2)——图像异步加载

图像异步加载 使用网络图片,特别是像淘宝、微淘这种需要大量展示图片的app,如果使用同步图片加载,那么整个应用都会被图片加载的过程给拖慢,因此也一般会使用异步图片加载,除了使用异步图片加载,为了节省网络流量和加快图片加载速度,需要另外进行图片缓存。 异步加载图片 异步加载图片很简单,利用GDC开一个异步线程下载图片就好了,直接上代码: dispatch_queue_t downloadQueue = dispatch_queue_create("com.abc.processsmagequeue", NULL); dispatch_async(downloadQueue, ^{ NSData * imageData = [NSData dataWithContentsOfURL:url]; }); 缓存图片 缓存图片可以使用 SDWebImage,这个lib相当方便,我使用的是 SDImageCache 这个类来缓存图片。作为存储图片的 key,可以直接使用图片的url作为key,然而图片url作为key会过长,因此可以使用url的md5作为图片的key,上代码: md5: NSString* urlMD5 = [url.absoluteString MD5Hash]; 取: UIImage *image = [[SDImageCache sharedImageCache] imageFromKey:urlMD5]; 存: [[SDImageCache sharedImageCache] storeImage:tmpImage forKey:urlMD5 toDisk:YES]; webp的使用 webp 是google发表的一种图片格式,这种图片压缩率会比jpeg、png更高,因此下载图片会更省流量(这种图片在chrome是可以直接解析的)。这iOS解析时,可以直接使用 WebPImage。 NSData *imageData = [NSData dataWithContentsOfURL:url]; UIImage *tmpImage = [[WebPImage alloc] loadWebPFromData:imageData];

iOS UI层总结(1)——ViewController生命周期

界面生命周期 在cocoa框架中,一个界面(View)就会有一个对应控制器(ViewController)来控制界面上的组件和事件。于是乎,界面控制器就有自己的生命周期。以下是我的经验: init 对象的初始化,对于ViewController,可以不用做任何事,界面对象的初始化可以放在loadView和viewDidLoad方法进行初始化 loadView 界面加载阶段,可用于构建界面和为界面布局 viewDidLoad 界面加载完成阶段,同样可以构建界面和界面布局,在这里可以设置delegate和调用数据获取事件。 viewDidUnload 界面卸载阶段,这个阶段一般不会被主动调用,当ViewController收到内存不足的消息时,就会被动调用这个方法,用户可以把界面元素都release掉和设置为nil。 didReceiveMemoryWarning 当ViewController收到内存不足的消息时,就会被动调用这个方法,这个方法可以把一些缓存的数据清除掉。如果当前界面是disappear状态,那么调用完这个方法之后会调用viewDidUnload。 viewWillAppear & viewDidAppear 这两个方法是界面被显示的时候顺序调用的,非常适合做埋点操作,也可以为当前界面做动画处理。 viewWillDisappear & viewDidDisappear 这两个方法是界面被消失的时候顺便调用的,同样也是做埋点操作,也可以做动画处理。 生命周期图 图片来源

objective-c 经验总结目录

终于过年了,算是有点时间整理一下这半年做过的事情了。最近一直在做无线,虽然对 objective-c 还是刚入门的状态,所以就随便说说好了。 以下是我的目录: