Project Icon

Hero

声明式iOS视图过渡动画库

Hero是一个简化iOS视图过渡动画开发的开源库。它通过声明式API封装了UIKit的复杂过渡接口,支持自动视图匹配、自定义动画和交互控制。Hero适用于多种布局和UI组件,提供类似Keynote Magic Move的效果,并基于Material Design原则自动调整动画时长。这个库让开发者能够轻松创建流畅优雅的视图切换效果。

Hero 是一个用于构建 iOS 视图控制器转场的库。它在 UIKit 繁琐的转场 API 之上提供了一个声明性层,使自定义转场成为开发者的简单任务。

Carthage compatible Accio supported codecov Version License Xcode 10.0+ iOS 10.0+ Swift 4.0+ 中文 README Donate

Unit Test Swift PM

      

Hero 类似于 Keynote 的神奇移动功能。它检查所有源视图和目标视图上的 heroID 属性。然后,每对匹配的视图都会自动从旧状态转换到新状态。

Hero 还可以为不匹配的视图构建动画。通过 heroModifiers 属性可以轻松定义这些动画。Hero 将与神奇移动动画一起运行这些动画。所有这些动画都可以通过用户手势交互控制

在视图控制器级别,Hero 提供了几个模板转场,你可以通过 heroModalAnimationTypeheroNavigationAnimationTypeheroTabBarAnimationType 设置。这些可以作为自定义转场的基础。结合 heroIDheroModifiers 来创建你自己独特的转场。

      

默认情况下,Hero 根据Material Design Motion Guide提供动态持续时间。持续时间根据距离和大小的变化自动确定,为你省去麻烦,同时提供一致且令人愉悦的动画。

Hero 不对视图的构建或结构做任何假设。除了在动画期间隐藏它们之外,它不会修改任何视图的状态。这使得它可以与Auto Layout程序化布局UICollectionView(无需修改其布局对象)、UITableViewUINavigationControllerUITabBarController等一起使用。

使用示例 1

视图控制器 1

redView.hero.id = "ironMan"
blackView.hero.id = "batMan"

视图控制器 2

self.hero.isEnabled = true
redView.hero.id = "ironMan"
blackView.hero.id = "batMan"
whiteView.hero.modifiers = [.translate(y:100)]

使用示例 2

视图控制器 1

greyView.hero.id = "skyWalker"

视图控制器 2

self.hero.isEnabled = true
greyView.hero.id = "skyWalker"

// collectionView 是所有红色单元格的父视图
collectionView.hero.modifiers = [.cascade]
for cell in redCells {
    cell.hero.modifiers = [.fade, .scale(0.5)]
}

你也可以在故事板中完成这些操作!

安装

CocoaPods

在你的 Podfile 中添加以下条目:

pod 'Hero'

然后运行 pod install

别忘了在每个你想使用 Hero 的文件中 import Hero

Carthage

在你的 Cartfile 中添加以下条目:

github "HeroTransitions/Hero"

然后运行 carthage update

如果这是你第一次在项目中使用 Carthage,你需要按照 Carthage 的说明 进行一些额外的步骤。

Accio

在你的 Package.swift 中添加以下内容:

.package(url: "https://github.com/HeroTransitions/Hero.git", .upToNextMajor(from: "1.4.0")),

接下来,将 Hero 添加到你的 App 目标依赖中,如下所示:

.target(
    name: "App",
    dependencies: [
        "Hero",
    ]
),

然后运行 accio update

Swift Package Manager

要使用 Apple 的 Swift 包管理器进行集成,将以下内容作为依赖项添加到你的 Package.swift

.package(url: "https://github.com/HeroTransitions/Hero.git", .upToNextMajor(from: "1.3.0"))

然后在你希望使用 Hero 的 Target 中将 "Hero" 指定为依赖项。 这里有一个 PackageDescription 的示例:

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "MyPackage",
    products: [
        .library(
            name: "MyPackage",
            targets: ["MyPackage"]),
    ],
    dependencies: [
        .package(url: "https://github.com/HeroTransitions/Hero.git", .upToNextMajor(from: "1.6.3"))
    ],
    targets: [
        .target(
            name: "MyPackage",
            dependencies: ["Hero"])
    ]
)

手动安装

  • Sources 文件夹拖到你的项目中的任何位置。

文档

查看 WIKI 页面(使用指南) 获取文档。

要获取更新的文档,请查看头文件注释。(在 Xcode 中使用 alt+click

Dash 兼容的 API 文档:https://HeroTransitions.github.io/Hero/

交互式转场教程

使用 Hero 进行交互式转场(第 1 部分)

常见问题

即使设置了 self.hero.isEnabled = true,也无法使用 Hero 转场

确保在导航控制器上也设置了 self.hero.isEnabled = true,如果你在导航控制器内进行推送/弹出操作。

转场期间视图被其他匹配的视图覆盖

匹配的视图默认使用全局坐标空间,而不匹配的视图默认使用局部坐标空间。使用局部坐标空间的视图可能被其他使用全局坐标空间的视图覆盖。要解决这个问题,请在被覆盖的视图上使用 useGlobalCoordinateSpace 修饰符。详情请查看 坐标空间 Wiki 页面

推送动画与我的自定义动画一起显示

这是 Hero 为导航控制器提供的默认动画。要禁用推送动画,请在导航控制器上将 self.hero.navigationAnimationType 设置为 .fade.none

如何在关闭时使用不同的默认动画

你可以使用动画类型 .selectBy(presenting:dismissing) 来为关闭指定不同的默认动画。

例如:

    self.hero.modalAnimationType = .selectBy(presenting:.zoom, dismissing:.zoomOut)

贡献

我们欢迎任何贡献。请阅读 贡献指南

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号