-
UIButton设置不同状态下的纯色背景图片的最优方案探讨
背景小组同学最近在封装一组自定义的UIKit控件,目的是做到比UIKit更易用高性能,今天初步读了部分实现代码,发现以下细节://基于CoreGraphics根据传入的UIColor绘制并生成UIImage。+ (UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIGraphicsBeginImageContext(rect.size); ...…
-
尊重自己
从一个兴趣说起我为什么喜欢踢球?因为我喜欢踢球过程中的操控、组织和超越的感觉,让我兴奋。相比而言,赢球都不能带来这种兴奋。所以我宁愿踢中场不赢球,也不愿意踢后卫赢球(当然只是打个比方,我踢中场反而更容易赢球)。所以就得出了不让我踢中场,我宁愿不去踢球的原因。也得出了为什么我喜欢小罗齐祖,而不喜欢大罗C罗梅西。再进一步分析,是因为操控满足我的控制欲,并让我获得安全感,组织是我对美好事物的追求(有条不紊的进攻和防守),超越让我获得成就感。再进一步分析,不论是控制欲、安全感、成就感还是对美好事物...…
-
iOS触控响应中那些没有细想过的问题
写在前面:这篇文章的重点在于讨论我想到的一些关于iOS触控响应这块容易忽略的问题,限于篇幅就不对基本的iOS触控响应知识做说明了。一、iOS给我们提供的响应触控的方式1、The touch-delivery methods定义在UIResponder中的以下方法,通过重写可以实现自定义的触控响应逻辑。- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;- (...…
-
对各模块间的互斥关系管理的小思考
背景最近在项目中遇到这样一个场景,在直播间的主播端有个功能区,里面是一些插件,这些插件之间在业务上存在互斥关系,也就是A处于开启状态时,B、C、D、E甚至是甲乙丙丁都不能打开。随着这块业务的增多,由于没有及时重构,导致互斥逻辑写的很是让人抓狂。假设有A、B、C、D四个互斥模块,当A要启动时,需要if (B is running) { Log("B is running"); return;}if (C is running) { Log("C is running"); ...…
-
类似逐帧动画或者tableView列表中有大量图片展示需求的场景我们可以做哪些优化?
背景最近公司在调研后打算替换掉老的识别库,据说新库在识别率上做的更好一些。但是在集成后实际压测发现并没有什么提升。(由于分析过程可能牵扯到公司业务,所以此处省略分析发现问题的过程,见谅)……….那么思路捋到这里我们可以总结出来两个至关重要的优化点: 避免频繁的解压资源包操作,每次解压绝对是件耗费的操作。这个是比较低级但在俯瞰全局时容易忽略的点,本篇不做讨论。 逐帧动画的图片数量比较大质量比较高,能否把PNG/JPEG图片解码成位图后保存到本地,避免CPU进行重复频繁的解码图片操作?基于...…
-
iOS优化界面渲染实践中的几点经验
一、圆角切割离屏渲染这个词已经老生常谈了,常说的圆角(切割)、遮罩mask、阴影shadow都会导致GPU离屏渲染,好在apple在iOS9以后优化了圆角切割,不再会导致离屏渲染了,但事实并不是这样的。场景比如我们直播间上方的观众列表中的圆形头像,在iOS10.3.2系统上用Instruments查看,还是有用黄色阴影标记的离屏渲染,而且由于直播间这种特殊场景,背景视频始终在渲染,这些圆角也就始终在离屏渲染,让人捉急。我各种猜想及google均无果(有人说设置imageView的backg...…
-
iOS UI Tests 实现方案分析
UI Tests是一个可以对UI进行测试的框架。为什么需要UI Tests呢?如果客户端分为基础层和业务层的话,业务层最终都是负责界面展示的,通常是MV(C/P/VM),(C/P/VM)中的逻辑并不适合用Unit Tests来覆盖。对于具体的界面操作流程,UI Tests是合适的选择。集成UI Tests下图为在Xcode中为项目添加UI Tests的步骤: 新建Target 新建Case ClassWriting UI TestsRecordingXcode为我们提供了把整套操作转化...…
-
iOS Unit Tests 实现方案分析
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。S.O.L.I.D理解单元测试,首先要理解单元(Unit):软件设计的最小单位,而在我们面向对象的世界里最小单位就是方法,所以好的单元测试一定很好的覆盖了方法。想覆盖就得有暴露,如...…
-
当我谈旅行时,我谈些什么
随心在昆明的第二天,还有没去的但不想去的景点,心里总觉得憋得慌缺点啥,在云南大学周边转了一上午,吃过午饭后就彻底无聊烦躁到极点了,这才是旅途的第二天就这状态了,不合适啊。安静下来想了想,是因为昨天在滇池旁没玩够就去了民族村,本打算逛完民族村再去滇池旁诗意一会坐坐船看看西山风景,结果民族村太好玩导致逛完后体力都消耗殆尽了,加上阴天的昆明湿冷湿冷的,出了民族村我们就直接打道回府了,仿佛在心里种下了不痛快的种子,所以今天内心一直在那闹情绪,无聊烦躁没目的,像极了平常生活中那种麻木消极的状态。缕清...…
-
UIScrollView中draggin属性的延迟变化导致bug的解决方法
最近开始用Swift写项目,就先自己封装了下拉上拉的库EasyPull上传到GitHub,期间跟网友交流解决了一些没考虑到的bug,现在库已经基本稳定了,我已经应用到生产中了。但是,在我不断的测试中,发现一个很隐晦的bug:在拉动到临界位置左右释放后,有时不能触发刷新。随即我看了看手机上的常用应用,发现天猫、美团、今日头条等都存在这个问题,好奇之心涌上心头,一番debug后,发现罪魁祸首是UIScrollView的draggin属性,官方的API有介绍:public var draggin...…