code随手记

Practice from here


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
close

自定义刷新控件

发表于 2016-11-16   |   分类于 iOS技术   |     |   阅读次数

一:前言

记得工作中第一次用的刷新控件是svpulltorefresh,用法稍微有点麻烦,而且bug颇多,后来果断放弃,现在用的是MJRefresh,不管是用法还是bug,都比前一个好多了,但是不久前也遇到了一个致命的bug,有好些情况下会导致MJRefresh陷入一个死循环,导致不断的刷新,只能重启软件才行。MJRefresh工程比较庞大,找到了bug也很难修改,然后还是决定自己写一个,系统提供的UIRefreshControl我认为是最好的,缺点是不提供自定义UI的方法,那么我就自己基于它来自定义UI。我不是一开始就决定继承于UIRefreshControl,我同时也写了一个继承与UIView的control,两个进行对比,发现使用UIview会有很多弊端,这种弊端在一些复杂特殊的情况下一下子就暴露出来了,而且很难解决,当然,正常状态下是没什么问题的,有兴趣的同学倒是可以去试一试。本demo供大家学习和参考,如有发现bug,还请issues 我。

二: 了解 UIRefreshControl

  • 基本使用方法
1
2
3
4
5
6
//初始化一个control
UIRefreshControl *control = [[UIRefreshControl alloc] init];
//给control 添加一个刷新方法
[control addTarget:self action:@selector(refreshAction) forControlEvents:UIControlEventValueChanged];
//把control 添加到 tableView
[self.tableView addSubview:control];
  • 存在的问题

      1. 刷新时的动画是一个灰色小菊花,很多情况下不符合app的刷新动画效果
      1. 经过多次反复测试,下拉的偏移量达到130以上才会触发刷新方法,很显然这个也不符合,一般的刷新控件的高度60左右,所以下拉的偏移量达到60就可以触发刷新的方法了。
  • 自定义控件的思路

      1. 去掉默认的动画效果
      1. 自定义自己的动画效果
      1. 改变满足刷新时的条件
        阅读全文 »

runtime详解

发表于 2016-04-16   |   分类于 iOS技术   |     |   阅读次数

公司项目用到一个三方开源库,里面有个bug,不能改动源码,我想来想去,只能通过runtime这个万能的手段来解决。但是runtime 并不怎么会用,怎么办,马上学习呗。说到runtime,它是Objective-c里面最核心的技术,被人们传呼的神乎其神,但是感觉有一层神秘的面纱笼罩其上,毕竟使用场景不多,相信大多数开发者都不会熟练的运用。而网络上也有无数的文章来讲解runtime,但是真的非常的乱,非常的碎片化,很少有讲解的比较全面的。

最初是在onevcat的博客上看到runtime的runtime的博客,说句实话,看完后我还是蒙的,这里面主要讲了一下runtime 比较核心的功能-Method Swizzling,不过看完后还是有些不知如何下手的感觉。下面是我自己对runtime的整理,从零开始,由浅入深,并且带了几个runtime实际的应用场景。看完之后,你可以再回过头来看喵神的这篇文章,应该就能看的懂了。

一:基本概念

Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。你可以在这里下到苹果维护的开源代码。苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime 函数的直接调用。大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。

  • RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。
  • 对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。
  • OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。
  • 只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

二:runtime的具体实现

我们写的oc代码,它在运行的时候也是转换成了runtime方式运行的,更好的理解runtime,也能帮我们更深的掌握oc语言。
每一个oc的方法,底层必然有一个与之对应的runtime方法。

阅读全文 »

iOS release,debug版设置不同的AppIcon

发表于 2016-04-13   |   分类于 iOS配置   |     |   阅读次数

也许你也遇到过这种情况,产品经理或者测试让你给装个测试包,一会装正式环境的,一会又装测试环境的,一会又装个灰度环境的。弄来弄去的有时候自己都搞不清楚测试包是什么环境下的。

通过判断debug还是release环境,我们可以用很多种方法来区分这两种环境,这里最简单而且效果非常好的一种方法。不同的环境下采用不同的图标,这样软件一安装上就可以非常明显的分辨出来。

第一步

创建一个新的AppIcon

image

阅读全文 »

iOS公共库

发表于 2016-04-06   |   分类于 iOS技术   |     |   阅读次数

第一步

打开Xcode,file->new->WorkSpace,我们使用WorkSpace来管理工程和依赖库

image

阅读全文 »
1…9101112
夜千寻墨

夜千寻墨

扫码关注微信公众号,及时获取文章更新

48 日志
10 分类
77 标签
RSS
GitHub Weibo 简书 instagram
© 2020 夜千寻墨
powered by Hexo
theme - Next
本站访客数人次 总访问量次