Hero 1.6.3

Hero 1.6.3

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2024年2月
SPM支持SPM

Luke ZhaoLuke ZhaoZonily Jame PesqueraJoe MattSteven Deutsch维护。




Hero 1.6.3

  • Luke和Joe Mattiello

Hero是一个用于构建iOS视图控制器转场的库。它在上层提供了一个基于UIKit繁琐的转场API的声明式层——使得自定义转场对开发者来说变得容易。

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

      

Hero类似于Keynote的魔法移动。它会检查所有源视图和目标视图上的heroID属性。然后自动将每个匹配的视图对从其旧状态过渡到新状态。

Hero还可以为未匹配的视图构建动画。通过heroModifiers属性定义这些动画很容易。Hero将与魔法移动动画同时运行这些动画。所有这些动画都可以通过用户手势进行**交互式控制**。

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

      

默认情况下,Hero根据Material Design 运动指南提供基于动态持续时间的设置。持续时间会自动根据距离和大小变化而确定,为您省去麻烦,同时提供一致和愉快的动画效果。

Hero不会对视图的构建或结构做出任何假设。在动画期间,它不会修改您的视图状态(除了隐藏它们)。这使得它适用于自动布局、程序布局、UICollectionView(不修改其布局对象)、UITableView、UINavigationController、UITabBarController等...

用法示例 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 is the parent view of all red cells
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 targets 依赖项中

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

然后运行 accio update

Swift 包管理器

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

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

然后指定 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.1"))
    ],
    targets: [
        .target(
            name: "MyPackage",1.6.1
            dependencies: ["Hero"])
    ]
)

手动

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

文档

查看WIKI页面(使用说明)以获取文档。

对于最新版本,请查看header-doc。(在Xcode中使用 alt+点击

交互式转换教程

Hero的交互式转换(第一部分)

常见问题解答

无法使用Hero转换,即使自我heroisenabled设置为true

如果您在导航控制器内部进行push/pop操作,请确保已在导航控制器上也启用了self.hero.isEnabled

在过渡过程中,被另一个匹配视图覆盖的视图

匹配的视图使用全局坐标空间,而未匹配的视图默认使用本地坐标空间。带有本地坐标空间的视图可能被其他使用全局坐标空间的视图覆盖。为了解决这个问题,请在被覆盖的视图中使用 useGlobalCoordinateSpace 修饰符。有关详细信息,请参阅坐标空间 Wiki 页面

滑动动画与我的自定义动画同时显示

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

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

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

例如

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

贡献

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