首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AirBnb 开源动画引擎 Lottie:采用 Core Animation 提高性能

Lottie 动画是通过 JSON 文件描述,可以使用 Bodymovin 插件从 After Effects 中导出。...Lottie 将对 JSON 进行解码,并访问渲染动画所需所有资源,就像它只是应用程序另一个静态资源一样。...这意味着动画在播放时将消耗 5–20% 以上 CPU,从而减少了用于应用程序其余部分可用 CPU 周期。...根据 Stephens 说法,这使得 Lottie 在更复杂情况下无法维持所需帧速并且开始丢弃帧会变得相对常见。此外,当主线程忙于一些昂贵任务时,动画可能会出现一些抖动。...Lottie 最初是用 Objective-C 编写,两年前在 Swift 中被完全重写,最终发布了第 3 版。

2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Swift 周报 第三十三期

该提案将 conformance 宏角色推广为 extension 宏角色,除了协议和 where 子句外,还可以向扩展添加成员列表Swift论坛 讨论这些是错别字吗?...有什么办法可以防止这种情况 noasync 注释不是解决方案,因为: 1)如果函数包装在另一个没有 noasync 注释函数,它不起作用;2)第三方库作者可能会忘记添加这样注释。...在此列表包含内部导入以及支持导入 C 和 C++ 类型而不间接公开其 ABI 是否也有意义,以便允许包在内部使用 C++ 互操作而不要求依赖项了解它?...回答: 发现唯一方法就是使用不同名称。 从这个角度来看,Swift 仍然缺少完整命名空间功能。可以是模块级命名空间,但更完整和可靠。...更喜欢像 C++ 那样命名空间,或者像 Rust 那样显式模块定义,但这似乎不是 Swift 进化愿景一部分。

31420

百行代码变十行,苹果SwiftUI可视化编程让开发者惊呼完美

这种声明式方式甚至允许使用复杂功能,如动画(animation)。只需要几行代码,即可添加动画在任何控件上,并且可以使用易于调用特效。...动态替换:Swift 编译器和运行时可以完全嵌入到 Xcode ,所以我们 APP 会一直处于构建和运行状态。我们看到预览界面并不是对用户界面的近似,它就是我们实时 APP。...Xcode 会通过「动态替换」在实时 APP 交换编辑代码,这是 Swift 新特征。...包信息已经写入 Swift,使我们可以更好地管理 Swift Target 、声明 Product,并管理相关环境依赖。...Swift 包管理器和 Github 包列表协作可以帮助开发者更容易发布自己 Swift 项目。 使移动端开发者有更高效生产力工具也十分重要。

4K10

Swift: 有用标准库全局函数

全局函数 Global functions :无需特定类型范围就可以从任何地方访问函数是一个古老概念,在 C 和 Objective-C 等语言中很流行,但是在 Swift 不建议使用,因为我们希望对它们进行很好类型化和范围划分...global function 由于历史原因,Swift 标准库仍然具有相当多公共全局功能,其中一些功能至今仍然非常有用。让我们看一下zip()和dump()之类函数。...标准库如何实现对数组和字符串写时复制(copy-on-write)语义实现——在有关值类型内存管理文章已经提到了这一点。...,将stride()函数添加到Swift,作为一种创建可以跳过某些元素循环方法,因为从swift 语言中删除了等效 C 样式方法: for (int i = 0; i < 10; i += 2)...,该实现可以在几秒钟内完成,因此将其复制到项目中将不起作用。)

2.7K20

SwiftUI - 百行代码变十行,Swift再创辉煌

这种声明式方式甚至允许使用复杂功能,如动画(animation)。只需要几行代码,即可添加动画在任何控件上,并且可以使用易于调用特效。...// 为什么需要 SwiftUI // 下面是来自王巍对UIKit诟病 UIKit 提供是一套符合直觉,基于控制流命令式编程方式。...不过,不管是从使用便利性还是稳定性来说,UIKit 都面临着巨大挑战。个人勉强也能算是 iOS开发“老司机”了,但是掉到 UIKit 坑里这件事,也几乎还是每天日常。...的确,我们平时开发很多时间都浪费在了这个方面,然而作为牛逼也相信必然会一统江湖 Swift 也是不忍心让开发人员掉入这样,SwiftUI 只是一个开始---打开新世界开始 // 声明式语法...例如,编写需要包含文本字段项目列表时,开发者可以用代码描述每个字段对齐方式、字体和颜色。代码也比以前更简单,更易于阅读。 ? 这种声明式风格非常适用于像动画这样复杂元素。

3K40

iOS开源界面布局库终于破3000star

经过几年打磨和多次重构,iOS开源界面布局库MyLayoutstar数量终于在2018年8月6号破3000了!有图为证: ? MyLayout 还有Swift版本TangramKit: ?...默认是NO.如果设置为YES的话则边缘视图边距不起作用了,而且子视图weight也不起作用了。而且不是调整自己大小了 //也就是当垂直方向则所有子视图按顺序排列在中间。...这些布局都是借鉴了目前市面上iOS和android以及HTML5各种布局框架和思想而设计。至于当时为什么以My开头初衷也是随手这么一写,所以后来开源后还是保持以My开头。...有人也许会觉得Masonry或者AutoLayout挺好,而且使用受众也广也流行,为什么还要去学习或者掌握一个新库。其实这也正常,人总是有懒惰天性,就如我不想学AutoLayout是一样。...swift版本TangramKit得到了有效解决。

1.8K40

N个理由告诉你,为啥插画在UI设计这么火?

在过去几年当中,插画开始以一种坚挺姿势,站在设计趋势最前列。不止是原本身处各个领域画手和插画师开始越来越受追捧,而且连网页、UI和效设计师都纷纷学习插画设计。...当然,更显著变化,是插画在网页和UI使用越来越多,越来越频繁,甚至越来越多样。...插画在UI界面运用,可以说相当广泛了,它更清晰,更时尚,也可以更加精准,甚至更有表现力,为什么不用呢?...而在诸多设计因素当中,插画在撬动用户情绪这一点上,有着无与伦比效用——从线条、色彩到面部表情和曲线和效,都在竭尽全力地为你阐述故事,营造氛围,将你拉到故事和场景当中去。 ? 6....一旦涉及到效和短视频,整个数字插画就开始具备更多可能性了,不同效能带来截然不同感觉和体验,更不用说这种玩法正贴合时下流行趋势。 ?

69360

Hipo 2.0 Swift重写,限时免费!限时免费!限时免费!

####iOS原生开发学习 在变成果粉同时,Apple推出了Swift语言,能够看得懂语法,满足了尝鲜欲望,加之当时考虑实现Hipo数据云端保存,跨设备同步功能,索性决定使用swift重写Hipo...因此Hipo 2.0.0: 首页集合每月花销,预算/花费,新建类入口都在首页; 数据按照月为单位,一月一屏,历史展示年列表一页足以,相互很方便切换。 全新设计记账表单页面,自定义数字键盘。...效部分,因为进度问题只是脑子过了下。 ####Hipo 2.0核心功能实现 Hipo数据方面,本地CoreData存储,使用增量同步策略。...Hipo 1.x数据存储在Sqlite,为了迁移到CoreData,之前选了个SwiftSql库,但是Swift升级到2之后,发现几个有名Swift Sql库都没能第一时间升级到Swift 2,...在数据网络存储,多设备同步实现方案选择纠结了很久,初期考虑使用类似LeanCloud方式,但是后来发现似乎LeanCloud方案无法仅依靠客户端实现增量同步(可能是没想到如何做),需要依赖云端代码

2.3K20

Alpha混合物体深度排序

这是个有着复杂答案简单问题: “为什么透明物体绘制顺序不对, 或者有些不见了?” 当绘制一个3D场景时, 对图形进行深度排序是非常重要, 这样离镜头近才画在远处物体前面....如果对场景所有物体进行排序, 那我们就可以先画远处, 再画近处, 这样就可以确保前面例子B可以在A之前绘制. 不幸是, 这说起来容易做起来难....比如说两个透明三角形相交时会怎样呢? 没有方法对这样三角形进行排序, 因为我们需要把B上半部分画在A前面, A下半部分画在B前面....无论你从哪个角度看, 每个屏幕上像素都会被覆盖两遍: 一次是物体前面, 一次是后面. 如果你用背面剔除丢弃了背面的三角形, 那就只剩前面了....结论: 背面剔除对于凸面体是完美的, 但是对于其它就无能为力了. 该怎样让游戏看起来更好一些? 最常用方法: 1.

67820

SwiftUI - 百行代码变十行,Swift再创辉煌

这种声明式方式甚至允许使用复杂功能,如动画(animation)。只需要几行代码,即可添加动画在任何控件上,并且可以使用易于调用特效。...为什么需要 SwiftUI 下面是来自王巍对UIKit诟病 UIKit 提供是一套符合直觉,基于控制流命令式编程方式。...不过,不管是从使用便利性还是稳定性来说,UIKit 都面临着巨大挑战。个人勉强也能算是 iOS开发“老司机”了,但是掉到 UIKit 坑里这件事,也几乎还是每天日常。...的确,我们平时开发很多时间都浪费在了这个方面,然而作为牛逼也相信必然会一统江湖 Swift 也是不忍心让开发人员掉入这样,SwiftUI 只是一个开始---打开新世界开始 声明式语法...例如,编写需要包含文本字段项目列表时,开发者可以用代码描述每个字段对齐方式、字体和颜色。代码也比以前更简单,更易于阅读。 [1240] 这种声明式风格非常适用于像动画这样复杂元素。

2.3K30

Swift入门:协议扩展

Swift最强大功能之一就是能够同时扩展整个数据类型。 这被称为协议扩展,它们通常用于在大型应用程序构建灵活性。 您已经了解了协议如何使我们定义遵循协议类型必须采用约定。...好,协议扩展使我们可以定义协议内部事物实现,从而将功能添加到符合协议所有类型。...明确地将i设为Int是有原因Swift还有其他类型整数可用。例如,UInt是一个无符号整数,这意味着它牺牲了保持负数能力来换取保持更大正数能力。...我们扩展程序专门修改了Int数据类型,而不是整数所有变体,这意味着这样代码将不起作用,因为UInt64没有扩展: let j: UInt64 = 8 print(j.clamp(low: 0, high...没有尝试用语言来介绍所有内容,但这没关系,因为您拥有所有重要东西,所有有时重要东西以及所有容易理解东西——您在以后项目或通过对该语言长时间体验可能会遇到许多其他功能。

80810

使用流动控制器(Flow Controller )实现 MVVM 协议模型

总目标 在选择哪一个架构之前,我会制定一个包含这个架构所关注能解决什么目标的列表,这是从多年 Java 项目开发总结出。这帮助我定义我们架构优点。下面是促使测试要点。...挑战 挑战第一阶段是很简单,作为一个项目列表显示他们,并选择一个显示细节。相信,这是开发应用程序最常见任务。在这里是一个简单猫头鹰列表,有名称,照片和描述。...这需要这些实体之间代码耦合更具优势。 我们可以看到在 OwlsFlowController 案例,通过配置选择是否在网格还是列表显示数据,在本例是固定,但它可以有两种测试情况。...在本例,只有数据和子单元变化,可以作为一个参数传递,并为所有列表创建一份可重用代码。 这里有趣一点是实现了两种响应协议:一个用于网格和一个列表。但两个实现是相同。...不能忘记感谢 Mikail Freitas 帮助我识别泛型协议初始化时错误。我们永远不明白为什么在一个案例运行好好地,而另一个则不起作用

95240

Codable 解析 JSON 忽略无效元素

例如,假设我们正在使用基于JSON Web API,该API返回当前正在 Swift 建模item集合,如下所示: struct Item: Codable { var name: String...因此,让我们来看一下如何在解码任何 Decodable 数组时忽略所有无效元素,而不必对 Swift 数据结构进行任何重大修改。...建立有损可编码列表类型 我们本质上希望做是将我们解码过程从非常严格更改为“有损”。...container.encode(element) } } } 完成上述操作后,我们现在只需将嵌套Collection类型使用新LossyCodableList即可自动丢弃所有无效...类型和属性包装器 关于在Swift实现属性包装器方式一件真正整洁事情是,它们都是标准Swift类型,这意味着我们可以对LossyCodableList进行改造,使其还可以充当属性包装器。

3.1K40

Swift 周报 第三十六期

可以通过使用可发送性强制或使用参与者限制来隔离引用类型包含对象,从而隔离引用类型存储属性。但全局变量可以从任何地方访问,所以这些工具不起作用。...Task { let b = Base() await b.foo() } } RunLoop.main.run() while true {} 不明白为什么可以直接在标有.../66896 "在 "super.init" 调用之前使用 "self" 与 "在 super.init 调用时未初始化属性" 冲突") 需要在 init 创建一个捕获 self 闭包来初始化属性...有点明白为什么编译器不能接受这种情况,但是必须使属性可选且可变,这很烦人,而一旦类完全初始化,它实际上既不应该为零,也不应该变。...很快,希望所有局部变量都具有“消耗”效果。 推荐博文 掌握 StoreKit2[10] 摘要: 本文介绍了 Swift StoreKit2,这是一个用于构建应用内购买和订阅框架。

20120

——来自编程语言深深祝福

在中国,对于生活在社会底层的人来说,生活和幸存就是一枚分币两面,它们之间轻微分界在于方向不同。...——余华《活着》 不知大家有没有觉得,今年新年格外热闹,凌晨鞭炮大概持续了一个小时,想,大家都是希望接下来一年都能好运连连。...6.JavaScript: document.write("祝大家新年快乐呀~"); 7.PHP: echo "祝大家新年快乐呀~"; 8.Go: fmt.print("祝大家新年快乐呀~"); 9.Swift...线性规,区间规,坐标规,背包规,树型归为您新年规划精彩。 散列表,哈希表,邻接表,双向链表,循环链表帮您在新年表达喜悦。...短暂祝福就到这啦,编程语句里面的内容也是可以自己随意变换呀,也可以发送给自己爱的人

71720

Swift入门: 数组

with Me", "Back to December"] 如您所见,Swift使用括号标记数组开始和结束,数组每个项都用逗号分隔。...在读取数组项目时,有一个陷阱:Swift从0开始计数。这意味着第一项是0,第二项是1,第三项是2,依此类推。...错误并不是因为Swift不能处理这样混合数组,将在稍后向您展示如何处理这些数组!——但相反,因为Swift是乐于助人。...类型安全是很重要,尽管Swift可以使数组保存任何类型数据,但这是一个意外。幸运是,已经说过可以使用类型注释来确切地指定希望数组存储数据类型。...如果你想创建数组然后稍后填充它,事情就不那么简单了——下面这种语法不起作用: var songs: [String] songs[0] = "Shake it Off" 原因是一开始看起来不必要迂腐,

74810

swift面向协议一点理解

第一个正式使用swift开发项目已经开始三周了,从一开始不习惯到现在渐渐地有点感觉,让感到它不仅仅是OC简单代替,而在设计上其实还是有差别的。...我们知道面向对象有很多好处,比如:封装、多态、抽象、访问控制等等,但是在使用过程我们也常常遇到很多问题,在Applesession也提到了一些: 隐式共享:最常见是同一个对象有多个引用计数,对其进行更改牵一发而全身...在子类重载某些方法或者对某些集成来属性进行操作时候可能会比较危险,你得确保你操作不会破坏父类需要某些约束条件。...无法为protocol添加stored property,可以保证在使用时候不必担心动到了不该数据。...同时在swift不光支持extension一个已有的class,连protocol也支持扩展,简直业界良心 从swift 2开始,也可以对于协议使用where进行类型限定,这一系列特性也让我们在开发过程如虎添翼

52230
领券