原文地址 : YYEVA

动画方案

概述

在目前的视频直播行业,礼物动画效果越来越酷炫。但由于动画方案和设备性能的原因,动画设计师的好多想法并没有得到很好的还原。YY的动画方案在近10年的时间也是经历了图片序列帧、SVGA、MP4、到现在的支持动态插入元素的YYEVA(YY Effect Video Animate)方案。目前已经基本能够实现设计师所见即所得,充分解放了设计师的想象力,同时能够在体积和性能上取得平衡。
在这篇文章中,我会从原理上去讲解目前市面上和YY的动画方案。也提供对比,以及分析各自的优缺点,方便开发者进行方案的选择。

阅读全文 »

原文地址 : 抖音 iOS 推荐 Feed 容器化总结

[转载]抖音 iOS 推荐 Feed 容器化总结

背景

抖音 Feed 容器在推荐、关注、同城、朋友等多个场景中使用,每个场景都有自身的逻辑和业务,最终汇总在 FeedViewController 中,随着业务的迭代,代码越来越臃肿,面临如下的问题:

  • 容器类(FeedViewController) 有 10000+行,还有十多个业务分类,整体的理解和维护成本高
  • 容器类 框架和业务边界不清晰,框架代码的修改不收敛和不规范,业务改动可能导致线上问题,如数据层不收敛导致的问题:自动删除导致一次滑动多个视频或者自动跳转到第一个视频等问题
  • 容器类 承担了推荐、关注、朋友三个大场景,细节的业务逻辑差异较多,目前多业务代码耦合在一起,增加新功能时需要考虑其他业务方,容易引入问题,开发和测试效率低
  • 内流容器和外流容器,形态相似但是代码分离,主体代码重复,新增功能时需要在两个类中做重复开发,如:视频预加载优化等,开发和维护成本高
  • 核心功能的监控和代码防劣化的体系不完善
阅读全文 »

iOS 动图优化实践

GIF 和 Animated WebP 是互联网上最主流的动图格式, 但是在 iOS 开发中, 原生的 UIImage 并不直接支持 GIF 以及 Animated WebP 的展示, 因此有了各种优秀的第三方开源方案, 例如 SDWebImage 以及 YYImage 等. 这篇文章将以我在开发中优化动图的实践为基础, 来介绍不同方案的思路以及优劣, 并给出优化的方案.

阅读全文 »

Objective-C 头文件展开

在 Objective-C 中, 头文件展开是在预处理阶段处理的, 如果项目头文件过多以及头文件写法不规范, 经常产生各种问题, 比如想找某个头文件是在哪里被导入的, 搜索代码基本搞不定, 比如我想找 ComHelper.h 是在哪里被引入的, 需要先展开头文件

阅读全文 »

iOS 无障碍化(适老化)适配总结

VoiceOver 和 Accessibility

iOS 开发中主要讨论的是 UIAccessibility 的 API 在 VoiceOver 上的运用.

重要: 使用旁白过程中遇到不明白的可以参考这个文档
旁白使用手册-在 iPhone 上学习旁白手势
比如下面这些情况

  1. 页面滚动, 旁白操作是 “三指轻扫”
  2. 激活项目, 旁白操作是 “轻点两下”
  3. “幕帘屏”功能, 屏幕会关闭, 但是屏幕依旧可以操作(不是 bug) 开关这个功能操作是”三指轻点三下”
  4. UISlider 的操作是 “轻点以选择滑块,然后单指上下轻扫”
阅读全文 »

SDWebImage4 分析


简书地址

导航

按照模块分析 SDWebImage

1. UI交互的基类 UIView+WebCache

2. SDWebImage 的主要管理者 SDWebImageManager

3. 缓存模块 SDImageCache

4. 下载模块 SDWebImageDownloader

5. 下载的执行者 SDWebImageDownloaderOperation

6. 预加载 SDWebImagePrefetcher

7. GIF子模块 FLAnimatedImage


阅读全文 »

由于原文已经删除, 在此转载供个人学习记录.

[转载]滴滴 iOS 动态化方案 DynamicCocoa 的诞生与起航

方案诞生

动态化一直是 App 开发梦寐以求的能力,而在 iOS 环境下,Apple 禁止了在 Main Bundle 外加载和执行的自己的动态库,所以像 Android 一样下发原生代码的方案被堵死。

后来像 React Native、Weex 这样的基于 Web 标准的跨端方案出现,各大公司都有对其进行尝试,但对于滴滴现状,也许并不适合:

  • 滴滴 App 强交互、以地图为主体、端特异性高;
  • 客户端人员充足,跨技术栈学习和开发有较大成本;
  • 大量固化 Native 代码,重写成本高。

所以我们思考,能不能做一套保持 iOS 原生技术栈、不重写代码就神奇的拥有动态化能力的方案呢?

于是,我们设计和实现了一个具有里程碑意义的 iOS 专属动态化方案:DynamicCocoa

阅读全文 »