首页/新闻资讯/正文详情

Hero 开源库 CHANGELOG 深度解读:从 1.3.0 到 1.6.3 的版本演进与核心源码实现

发布时间:2026/9/20 23:56:16 来源:云帆数科 栏目:资讯中心
Hero 开源库 CHANGELOG 深度解读:从 1.3.0 到 1.6.3 的版本演进与核心源码实现
Hero 开源库 CHANGELOG 深度解读从 1.3.0 到 1.6.3 的版本演进与核心源码实现【免费下载链接】HeroElegant transition library for iOS tvOS项目地址: https://gitcode.com/gh_mirrors/he/HeroHero 是面向 iOS 与 tvOS 的优雅转场动画库提供在 UIKit 复杂转场 API 之上的声明式封装Hero.podspec。本文以仓库根目录 CHANGELOG.md 为脉络逐版本梳理 Hero 从 1.3.0 到 1.6.3 的关键变更并结合 Sources 目录下的真实实现解释每个里程碑背后的设计动机与工作原理。读完本文你将理解 Hero 的快照snapshot机制、自定义转场 API 的演进、Swift 生态适配路径以及如何在升级版本时评估对自身项目的影响。版本演进总览Hero 的四个关键阶段从 CHANGELOG 可以清晰看出 Hero 的能力迭代分为四个阶段版本区间阶段主题代表性能力1.3.0 – 1.3.1转场 API 完善期completion 回调、delegate 链式转发、阴影与闪烁修复1.4.0 – 1.5.0语言与快照优化期Swift 4.2、自定义快照协议、RTL 语言支持1.6.0生态现代化里程碑Swift 5、Swift Package Manager、SwiftUI 支持1.6.1 – 1.6.3稳定性与平台扩展期Xcode 14 警告修复、anchorPoint 支持、visionOS 适配下面按版本号逐一深入。1.6.3visionOS 适配与 CI/CD 修复1.6.3 的核心提交是 Adaption for visionOS使 Hero 可以在 visionOS 平台构建。对应源码中可见的平台条件编译例如 HeroTransitionUITabBarControllerDelegate.swift 中使用#if !os(visionOS)包裹相关逻辑说明 Tab Bar 相关的 UIKit 转场协议在 visionOS 上不可用需要条件编译隔离。同时该版本修复了 CI 构建矩阵build.yml、test.yml更新 GitHub runner 环境、处理 Xcode 14.0 引入的编译警告Fix build warnings with Xcode 14.0、Fix lint warnings并在 README 中补充了 API 文档链接与平台徽章。对于使用 Swift Package Manager 集成的用户该版本与 Package.swift 声明的平台要求一致——iOS 10.0 与 tvOS 10.0。1.6.2anchorPoint 支持与构建警告清理1.6.2 修复了 #717、#734、#735、#736、#739、#740 等多期 issue并解决 Xcode 13.4.1 构建警告问题。其中最重要的功能变更是#742为转场添加anchorPoint支持。anchorPoint 在源码中的落地anchorPoint已正式成为 Hero 目标状态target state的可配置属性。在 HeroTargetState.swift 中public var anchorPoint: CGPoint?该属性在转场匹配预处理阶段被自动设置。SourcePreprocessor.swift 中有如下逻辑if view.layer.anchorPoint ! targetView.layer.anchorPoint { state.anchorPoint targetView.layer.anchorPoint }即在两个视图通过 heroID 配对时如果源视图与目标视图的layer.anchorPoint不一致Hero 会把目标视图的 anchorPoint 写入目标状态从而保证旋转、缩放等基于锚点的变换在转场中表现正确。同时HeroContext.swift 在生成快照时也会显式同步锚点snapshot.layer.anchorPoint view.layer.anchorPoint snapshot.layer.position containerView.convert(view.layer.position, from: superview)快照系统与 anchorPoint 的配合这段代码所在的snapshotView(for:)是 Hero 转场的核心它先把源视图的圆角、透明度、阴影临时归零按 HeroSnapshotType 生成快照再把圆角、阴影、边框、zPosition、锚点等图层属性原样拷贝到快照层上最后隐藏原视图并让快照参与动画。这也解释了为什么自定义anchorPoint的视图如做旋转动画的卡片在旧版本中会出现转场错位——快照层没有继承锚点1.6.2 正是补齐了这一环。1.6.1依赖与文档维护1.6.1 是维护型版本将 CI 依赖迁移到 Mintcloses #703 Move CI depends to Mint对应仓库根目录的 Mintfile 与 Makefile修复 SPM 缺失导入问题#704、清理 README 死链#708并将文档中 Material Design 的动效时长与缓动链接更新为最新地址。1.6.0Swift 5、SPM、SwiftUI 与扩展目标支持1.6.0 是 Hero 生态现代化的分水岭四项重要能力在同版本落地Swift 5 支持#695Hero.podspec 中s.swift_version 5.0Package.swift 声明swiftLanguageVersions: [.v5]源码全面切换到 Swift 5 语法Swift Package Manager 支持#628仓库新增 Package.swift定义Hero库 targetpath 指向Sources与HeroTests测试 targetpath 指向Tests平台限定.tvOS(.v10)与.iOS(.v10)SwiftUI 支持#623新增 SwiftUIMatchExample.swift 示例通过UIHostingController把 SwiftUI 视图嵌入 Hero 转场体系演示了列表到详情页的 hero 匹配动画App Extension 目标支持#681使 Hero 可用于 Today Widget 等 extension 场景。交互控制 API 的演进1.6.0 还修复了三个行为问题从中可以看到 Hero 交互模型的细节#585replaceViewControllers现在会调用 completion——转场结束时 completion 一定会被触发#559从当前进度恢复 property animator——交互转场中途释放手指后动画从当前 fraction 继续而非从头开始#465键盘转场修复——输入框切换场景下的布局跳动问题。1.5.0自定义快照协议与 RTL 支持1.5.0 引入了两个值得深入理解的能力均由 ManueGE 贡献。HeroCustomSnapshotView让视图自定义自己的快照新增协议HeroCustomSnapshotView在 HeroContext.swift 中定义/// Allows a view to create their own custom snapshot when using **Optimized** snapshot public protocol HeroCustomSnapshotView { var heroSnapshot: UIView? { get } }快照生成时只要视图采用.optimized默认快照类型Hero 就会优先询问视图自身的快照HeroContext.swiftif let customSnapshotView view as? HeroCustomSnapshotView, let snapshotView customSnapshotView.heroSnapshot { snapshot snapshotView }这解决了一个真实痛点.optimized快照为不同类型视图做了差异化优化如无子视图的UIImageView直接克隆 image、半透明UINavigationBar剥离背景再快照、UIStackView走慢速渲染但对带有 mask 或复杂自绘内容的视图优化快照可能与真实外观不一致。此时让视图通过该协议提供自定义快照能保证转场视觉完全正确。RTL 语言支持#520为从右向左书写的语言如阿拉伯语、希伯来语添加支持转场方向逻辑不再硬编码为从左到右。这与 HeroTransition.swift 中defaultAnimationDirectionStrategy: HeroDefaultAnimationType.Strategy .forceLeftToRight的默认策略互为补充——默认强制 LTR但 RTL 环境下可配置适配。另外 #521 让UIImageView的优化快照开始考虑子视图的隐藏状态仅当view.subviews.filter({!$0.isHidden}).isEmpty时才走克隆 image的快速路径HeroContext.swift避免遗漏隐藏子视图导致快照与真实视图不一致。1.4.0Swift 4.2 支持1.4.0 由 rennarda 的 PR #534 引入 Swift 4.2 支持。这是 Swift 语言演进与 iOS 生态兼容性同步的常规步骤为后续 1.6.0 的 Swift 5 迁移铺平道路。Swift 4.2 时代的 API 命名习惯如hero.dismissViewController()、hero.replaceViewController(with:)至今仍保留在 UIViewControllerHero.swift 中只是通过available(*, renamed:)与available(*, deprecated, renamed:)做了版本兼容标注。1.3.1 与 1.3.0completion 回调与内存管理修复1.3.1修复 retain cycle#516 修复了因强引用previousNavigationDelegate与previousTabBarDelegate导致的内存泄漏。对应实现中这两个 delegate 被声明为weakUIViewControllerHero.swiftweak var previousNavigationDelegate: UINavigationControllerDelegate? weak var previousTabBarDelegate: UITabBarControllerDelegate?Hero 接管导航/标签转场时会把原来的 delegate 暂存转场结束或hero.isEnabled false时还原同一文件 L76-L96。如果这里用强引用代理链就可能形成循环引用导致 VC 无法释放。1.3.0completion 参数与 delegate 转发#456dismissViewController与replaceViewController增加可选 completion 参数。在 UIViewControllerHero.swift 中dismissViewController(completion:)会智能判断如果当前 VC 在 Navigation Controller 栈中则执行popViewController(animated:)否则执行dismiss(animated:completion:)replaceViewController(with:completion:)则分三种场景替换——Navigation 栈顶、present 层级、UIWindow 根控制器#430允许前一个UINavigationControllerdelegate 继续处理 delegate 事件。见 HeroTransitionUINavigationControllerDelegate.swiftHero 转发willShow/didShow给原始 delegate避免接管后原有业务逻辑失效#440修复快照裁切阴影。快照生成时阴影属性会被临时清零再恢复HeroContext.swift1.3.0 完善了恢复逻辑保证带阴影的视图快照不会把阴影裁掉f4dab9修复 CALayer 动画闪烁解决CALayer动画在转场首帧的闪烁问题。升级视角completion 在源码中的完整生命周期1.3.0 引入、1.6.0 修复的 completion 机制是理解 Hero 转场收敛逻辑的钥匙。completion 由HeroTransition持有并统一回调转场启动时HeroTransitionCustomTransition.swift 把用户 completion 包装进completionCallback转场结束时HeroTransitionComplete.swift 的complete(finished:)在清理所有临时状态快照、动画器、progress 观察者之后调用completionCallback?(finished)L128状态机在complete末尾复位到.possiblestate .possibleisTransitioning重新变为false。因此replaceViewController中会先检查hero.isTransitioning若转场进行中则拒绝执行并提示先用Hero.shared.cancel(animated:false)或Hero.shared.end(animated:false)结束当前转场UIViewControllerHero.swift。这也是 1.6.0 #585 修复的意义以往 completion 在某些替换场景不会触发升级后可以在 completion 里可靠地执行后续业务逻辑。配套示例与验证资源如需在实践中观察这些能力仓库提供了两代示例工程ExamplesSwift 5 时代SwiftUIMatchExample.swift 演示 SwiftUI 转场MatchExample.swift、MatchInCollectionExample.swift 演示 hero 匹配动画AppStoreCardExample.swift 演示卡片式转场BuiltInTransitionExample.swift 演示内置转场类型LegacyExamplesStoryboard 驱动的历史示例AppleHomePage、CityGuide、ImageGallery、ListToGrid、VideoPlayer 等适合对照 1.6.0 之前的 API 形态Tests/HeroTests.swift覆盖字符串式 modifier 的解析器Lexer Parser可验证fade()、scale(0.5) translate(200, 0)这类声明式转场语法。版本验证上Hero.podspec 的s.version 1.6.3与 CHANGELOG 最新版本一致可直接作为集成校验点CocoaPods 用户应看到 1.6.3SPM 用户则以 Package.swift 与 git tag 为准。结语CHANGELOG 折射出的工程演进逻辑回看这份 CHANGELOGHero 的演进路径清晰可循先用 completion 与 delegate 转发完善 API 的可编程性1.3.x再通过自定义快照协议解决真实视图的渲染保真问题1.5.0随后借助 Swift 5、SPM、SwiftUI 融入现代 Swift 生态1.6.0最后以 anchorPoint 支持、Xcode 新版本适配与 visionOS 适配完成跨平台与稳定性收尾1.6.2 – 1.6.3。对于仍在评估或正在升级 Hero 的开发者这份 CHANGELOG 既是一份变更清单也是一份浓缩的架构设计文档——结合 Sources 阅读能比单纯追版本号获得更多可复用的转场实现经验。【免费下载链接】HeroElegant transition library for iOS tvOS项目地址: https://gitcode.com/gh_mirrors/he/Hero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

grok-build v0.2.87 版本解读:自动订阅升级、/docs 导航与按模型推理强度配置
grok-build v0.2.87 版本解读:自动订阅升级、/docs 导航与按模型推理强度配置

grok-build v0.2.87 版本解读:自动订阅升级、/docs 导航与按模型推理强度配置 【免费下载链接】grok-build SpaceXAIs coding agent harness and TUI. Fullscreen, mouse interactive, extensible. 项目地址: https://gitcode.com/gh_mirrors/gr/grok-build … · 2026/9/20 23:56:16

create-t3-app 中的 NextAuth.js 集成指南:从会话管理到 tRPC 鉴权实战
create-t3-app 中的 NextAuth.js 集成指南:从会话管理到 tRPC 鉴权实战

开发工具CLI代码生成 【免费下载链接】create-t3-app The best way to start a full-stack, typesafe Next.js app 项目地址: https://gitcode.com/gh_mirrors/cr/create-t3-app 点击查看 免费下载 本篇技术指南以 create-t3-app 官方文档(葡萄牙语版 … · 2026/9/20 23:56:16

多路 Git Worktree 合并冲突爆发?TaoToken 这样改 Codex 通道
多路 Git Worktree 合并冲突爆发?TaoToken 这样改 Codex 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/20 23:56:16

本地AI视频剪辑实战:Palmier Pro完整体验与避坑指南
本地AI视频剪辑实战:Palmier Pro完整体验与避坑指南

在 Mac 上折腾视频剪辑这些年,我见过太多“新概念剪辑工具”,上来都说自己有多智能,结果百分之八十是套了一层 AI 壳,剪个片子还是得靠手。2024 年底我开始用 Palmier Pro,本来没抱太高期待,几周体验下来反… · 2026/9/21 0:39:26

个人特种证件查询网站被黑?这份速查手册救急
个人特种证件查询网站被黑?这份速查手册救急

个人特种证件查询网站被黑?这份速查手册救急 网站突然弹窗、被挂马、甚至变成钓鱼页,后台却查不到异常日志?这种“网站被黑挂马不知道怎么办”的恐慌,是做过个人特种证件查询网站的开发者最熟悉的噩梦。别慌,这篇速查手册不讲虚的,直接拆解从代码层到服务器层的致命漏洞,给你一套能落地的防护方案。… · 2026/9/21 0:38:59

STM32驱动SPL06-001气压传感器:I2C通信与温度补偿实战
STM32驱动SPL06-001气压传感器:I2C通信与温度补偿实战

1. 项目缘起与整体设计思路1.1 为什么选SPL06-001这颗气压传感器先说选型这件事。市面上做气压测量的传感器不少,BMP280、BME280、MS5611、DPS310这些我都用过,最后在这个项目里定下SPL06-001,原因很实在:它的相对精度能到0.06 hP… · 2026/9/21 0:38:26

解决Codex频繁重连问题:本地代理配置与修复指南
解决Codex频繁重连问题:本地代理配置与修复指南

这周被 Codex 整得有点上火——每次在终端里丢一个问题过去,它先沉默十几秒,日志里反复刷 connecting、reconnecting 的痕迹,循环整整五次之后才开始出字。一开始我以为是自己网络不稳,Wi-Fi 换了、热点也试了、网络环境也切换了&… · 2026/9/21 0:38:26

汽车制造业主数据治理架构与实施指南
汽车制造业主数据治理架构与实施指南

1. 项目背景与核心价值解析汽车制造业作为典型的离散型制造行业,其数据管理复杂度远超一般行业。一辆普通乘用车包含2万多个零部件,涉及上下游数百家供应商,整个价值链产生的数据维度呈现几何级增长。德勤这份112页的解决方案正是针对这一行业… · 2026/9/21 0:38:26

本地部署大模型实战:从零打造个人AI知识库与Agent助手
本地部署大模型实战:从零打造个人AI知识库与Agent助手

作为一个把业余时间几乎都砸在折腾AI上的人,这些年我前前后后做过不少小项目,但真正让我觉得拿得出手、愿意一直维护下去的,是我最近完成的一个个人AI项目——一套跑在本地的“个人AI工作助手”。简单说,它不是一个只会聊天的玩具… · 2026/9/21 0:38:26

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码