「 iOS知识小集 」2018 · 第 42 期

栏目: IOS · 发布时间: 5年前

内容简介:从 XCode 9 开始,我们可以在工程中创建 named color,并在代码或 Storyboard 中使用。要创建 named color,只需要进入 Assets.xcassets 中,点击右键,出现图 1 的菜单,选择 New Color Set,然后编辑 named color 的名称和色值等信息,如图 2 所示。在代码中,我们可以直接使用 UIColor(name: "Test")来使用,如图 3 所示。

从 XCode 9 开始,我们可以在工程中创建 named color,并在代码或 Storyboard 中使用。要创建 named color,只需要进入 Assets.xcassets 中,点击右键,出现图 1 的菜单,选择 New Color Set,

「 iOS知识小集 」2018 · 第 42 期

然后编辑 named color 的名称和色值等信息,如图 2 所示。

「 iOS知识小集 」2018 · 第 42 期

在代码中,我们可以直接使用 UIColor(name: "Test")来使用,如图 3 所示。

「 iOS知识小集 」2018 · 第 42 期

Diff:/Podfile.lock NO such file or directory

作者:Lefe_x

「 iOS知识小集 」2018 · 第 42 期

Pod install 后,运行项目后发现报错,错误提示如图所示。按提示看了下 Podfile.lock 是存在的。试了各种办法,都没有解决(删除 pods 文件夹,重新安装,都不好使)。无奈之下,看了下文件的路径。发现文件路径错了, XXX/Pods/Pods/Target Support Files/xxx ,发现文件路径多了个 Pods 。这个路径我并没有设置,是 Pod 自己管理的。最后发现在下图的位置中可以配置路径,把这个路径修改成正确的地址就可以了:

「 iOS知识小集 」2018 · 第 42 期

iOS 中的 GZIP 压缩

作者:这个汤圆没有馅

当项目中与后端接口交互涉及到大量数据信息的时候,为了提升响应速度需要对传输的数据进行压缩,压缩成功后将 data 转化为 string 传给服务器。

关于 iOS 端的 GZIP 压缩,这是我目前在 github 上找到的 star 数最多的一个:t.cn/RUBP1Le

GZIP 支持 cocoapods,如果手动导入的话,记得在 Targets--Build Phases--Link Binary With Libraries 中添加 libz.1.2.5.tbd。

模拟一万条简单的数据,看看压缩前后数据大小变化。如下图。

「 iOS知识小集 」2018 · 第 42 期

经过 GZIP 压缩后,字节量缩小幅度很大。但是压缩后的 data 是无法通过 - (nullable instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding; 这个方法得到string的。

这个时候我们再来看 java 中对于压缩的数据是如何解压缩的,java 代码如下图。

「 iOS知识小集 」2018 · 第 42 期

其中有一行代码为

byte[] compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);
复制代码

说明 java 是对 base64 的string 进行解压缩的,也就是说我们在进行 data 压缩后,需要传 base64 的string 给服务器。那么只需要加一行代码

[zipData base64EncodedStringWithOptions:0];
复制代码

使用 CaseIterable 获取枚举的所有 case

在写 Swift 代码时,可能需要获取枚举的所有 case,在之前的版本中,我们可能需要自己来实现一个静态方法 allCases,如下代码所示:

enum CompassDirection {
    case north, south, east, west

    static let allCases = [north, south, east, west]
}
复制代码

而在 Swift 4.2 中,标准库为我们提供了 CaseIterable 协议,可以实现这个需求,如下代码所示:

enum CompassDirection: CaseIterable {
    case north, south, east, west
}

print("There are \(CompassDirection.allCases.count) directions.")
// Prints "There are 4 directions."
let caseList = CompassDirection.allCases
                               .map({ "\($0)" })
                               .joined(separator: ", ")
// caseList == "north, south, east, west"
复制代码

实现 CaseIterable 的枚举在编译器会自动合成 allCases 方法,且 allCases 数组中的元素按 case 声明的顺序。不过如果枚举中的关联值或者 @available 属性,则需要自己重写 allCases,如下代码所示:

enum CompassDirection: CaseIterable {

    case north, south, east
    case west(Int)

    static var allCases: [CompassDirection] {
        return [north, south, east, west(0)]
    }
}

print("There are \(CompassDirection.allCases.count) directions.")
// Prints "There are 4 directions."
let caseList = CompassDirection.allCases
    .map({ "\($0)" })
    .joined(separator: ", ")
// caseList == "north, south, east, west(0)"
复制代码

不可或缺的背景色

作者:Vong_HUST

最近遇到两个和背景色有关的坑,和大家一起分享下。第一个页面 A push到页面 B 时,会莫名卡顿。一开始还以为是代码里有耗时操作,然后就一行行屏蔽,屏蔽到什么代码都没有了,还是会卡顿,现在大概就如下图所示。

觉得不可思议,因为 push 到其它页面都不会发生这种情况,最后比对代码发现,其它页面比 B 页面唯一多的一个操作就是设置了 vc.view.background,只要设置了背景色不为 nil 且不为 [UIColor clearColor],就不会出现图中的卡顿感。

另外一种情况就是,如果 collectionView 和 vc.view 背景色都是 nil 或者 clearColor,会出现一种现象就是 collectionView 只能响应有内容区域的点击事件,比如一个 (0, 0, 100, 100) 的 cell 上有一个 (0, 0, 20, 100)的 button,则只有按钮区域是能点击响应事件,其它空白区域(20, 0, 80, 100)的区域点击是不会触发 didSelect 回调的,一旦设置了 vc.view 的背景色,就会恢复正常。

以上两种现象都是由于背景色没有处理妥当,导致页面卡顿或无法响应事件,只要设置了背景色,即可恢复。具体原因还不清楚,有知道的老哥们可以在评论中指点一波~

注:提拉拉拉就是技术宅 大大对此的解释是:不是卡顿,动画本来就是这样子的,后面的vc只推过去一点点。我曾经做过一个app,背景是spritekit的特效,然后整个app 所有vc 都是模态窗口盖在特效上面,背景颜色全部都是clear ,push的动画本身就是这个样子的。


以上所述就是小编给大家介绍的《「 iOS知识小集 」2018 · 第 42 期》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

现代应用数学手册

现代应用数学手册

《现代应用数学手册》编委会 / 清华大学出版社 / 2005-1-1 / 48.00元

本书是进行科学计算的常备工具书,内容新颖,查阅方便,实用性强。主要介绍生产、科研、管理、数学等实践中在计算机上使用的各种计算方法和技巧。全书分为14章,依次为数值计算概论、插值法、函数逼近与曲线拟合、数值积分与数值微分、方程求根、线性方程组的直接解法和迭代解法、矩阵特征值问题、非线性方程组数值解与最优化方法、常微分方程初值问题和边值问题的数值解法、偏微分方程的数值解法、多重网络法和积分方程数值解法......一起来看看 《现代应用数学手册》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试