前言
在过去iOS
页面布局较为传统,大多数人使用Frame
或者AutoLayout
来布局,在iOS9
以后,引入了UIStackView
。UIStackView
是用于线性布局的控件,可以自动管理子视图布局,自动填充。它借鉴了前端的布局算法Flexbox
,可以简便地实现各种页面布局。
UIStackView
虽然已经不是新控件了,但还是有很多同学并没有使用起来。有时需要修改别人的代码看到乱糟糟的布局代码就有很多槽点。所以这也是写这篇文章的目的所在,真的推荐大家使用StackView,可以让你事半功倍,省下来的时间摸鱼不香嘛。
回归正题,不管是使用Frame
或者AutoLayout
来布局,我们都需要对所有的控件的位置、大小进行设置,Frame
需要指定位置布局,AutoLayout
需要指定约束布局;而UIStackView
布局方式凸显它的优势在于不需要设置排列视图(即子视图)的位置,大小(不是必须的),而是通过自身的排列、分布方式自动完成布局。对比起来,使用UIStackView
更高效,我们可以通过嵌套UIStackView
快速完成各式各样的布局。
前言
在「简单了解 iOS CVPixelBuffer (中)」中,我们了解了颜色空间RGB
和YUV
的区别以及相关的背景知识,最后对CVPixelBuffer
中的kCVPixelFormatType
相关类型进行了解读。我们已经对CVPixelBuffer
有了初步的了解,在这篇文章中,我们将继续聊聊CVPixelBuffer
在使用过程中的一些格式转换;
RGB
和YUV
格式转换
在很多场景下,我们需要将不同的颜色空间进行转换,以此来解决对应的工程性问题。
以下是转换公式:
YUV -> RGB
前言:
在「简单了解 iOS CVPixelBuffer (上)」)中,我们了解了CVPixelBuffer
如何创建、修改、以及检查CVPixelBuffer相关的参数。在上篇文末我们有讲到在这篇文章中,我们将了解颜色空间RGB和YUV的区别以及相关的背景知识,然后回过头来再看CVPixelBuffer
中的kCVPixelFormatType
相关的类型。
相信大家对于RGB都不陌生吧,那么YUV大家是否了解呢,它为我们做了些什么?
在开篇我先提出一个问题:为什么要使用YUV呢? 这个问题在我们了解了颜色空间之后,相信大家心中就已经有了答案。接下来开始我们的正文。
颜色空间
前言:
在iOS中,我们会常常看到 CVPixelBufferRef
这个类型,最常见到的场景是在Camera 采集的时候,返回的数据中有一个CMSampleBufferRef
,而每个CMSampleBufferRef
则包含一个 CVPixelBufferRef
,在视频硬解码的返回数据里也是一个 CVPixelBufferRef
(里面包含了所有的压缩的图片信息)。在了解了CVPixelBufferRef
之后,我们将能够掌握并且运用CVPixelBufferRef
的使用;
本篇我们主要熟悉下CVPixelBuffer
的使用;
CVPixelBuffer 简介
CVPixelBuffer
:核心视频像素缓冲区是在主存储器中保存像素的图像缓冲区。生成帧、压缩或解压缩视频或使用 Core Image
的应用程序都可以使用 CVPixelBuffer
。
在前面的文章中,我们有讲过如何如何使用CocoaPods制作私有库,在制作私有库中,有一个关键点就是配置.podsepc
文件,所以在这篇文章中我们将整理出.podsepc
文件的配置。
想要了解cocoapods官方文档的详细设置点这里 podspec.html
基础设置
这里的设置都是最基础的,一般会有默认的文案,或者在生成podsepc文件时,自动生成的。如果了解过的,可以自行忽略。
设置名称:
前言
我们在前文「了解 Mach-O文件」中,有提到过编译器会将文件编译,然后生成Mach—O
文件,而程序是不会执行这么多的Mach—O
文件,所以链接器会把这些Mach—O
文件合并成一个。
链接器干了什么?
iOS系统的可执行文件不就是 Mach-O
文件吗,为什么还需要合并Mach- O
文件呢?可能有同学会有疑惑吧🤔,是这样的,在我们的项目文件中定义了很多函数和变量,而这些函数和变量和其他文件有可能是相互依赖的,如果没有将这些函数和变量绑定关联起来的话,那么单个 Mach-O
文件是无法正常运行的,因为,如果运行时碰到调用在其他文件中实现的函数的情况时,就会找不到这个调用函数的地址,从而无法继续执行。
链接器在链接目标文件的过程中,会创建一个符号表(Symbol Table
),用来把我们定义的符号(链接中,我们将函数和变量统称为符号)和未定义的符号记录在其中。