StagehandTesting 4.0.0

StagehandTesting 4.0.0

Nick EntinNick Entin 维护。



  • Square

Stagehand

CI Status Version License Platform

Stagehand 为在 iOS 上构建动画提供了一个现代、类型安全的 API。Stagehand 围绕一系列核心概念设计

  • 结构组合 - Stagehand 使构建复杂、多部分动画变得容易,这些动画由小巧、可重用的部件组成,容易推理。
  • 构造和执行的分离 - Stagehand 提供独立的机制用于构造和执行,从而增加了动画的灵活性,并使队列动画等概念能够直接工作。
  • 编译时安全性 - Stagehand 使用现代 Swift 功能来提供定义动画的编译时安全 API。
  • 测试性 - Stagehand 建立在快照测试的概念之上,引入了动画的可视测试范例。

安装

CocoaPods

要使用 CocoaPods 安装 Stagehand,只需将以下行添加到您的 Podfile

pod 'Stagehand'

要安装 StagehandTesting 和动画快照测试工具,将以下行添加到您的 test target 定义中的 Podfile

pod 'StagehandTesting'

默认情况下,这将使用 Point-Free 的 SnapshotTesting 来记录快照并执行比较。如果要使用 Uber 的 iOSSnapshotTestCase 作为快照引擎,设置您的 test target 依赖以使用 iOSSnapshotTestCase subspec。

pod 'StagehandTesting/iOSSnapshotTestCase'

Swift 包管理器

要使用 Swift 包管理器安装 Stagehand,请在您的 Package.swift 文件中添加以下内容

dependencies: [
    .package(url: "https://github.com/cashapp/stagehand", from: "4.0.0"),
],

开始使用 Stagehand

动画始于 Animation 的构建。一个 Animation 对于元素的类型是通用的,并定义了该元素如何被动画化。

例如,我们可以编写一个动画,通过将视图的透明度淡化为 0.8 然后恢复至 1 来高亮显示视图

var highlightAnimation = Animation<UIView>()
highlightAnimation.addKeyframe(for: \.alpha, at: 0, value: 1)
highlightAnimation.addKeyframe(for: \.alpha, at: 0.5, value: 0.8)
highlightAnimation.addKeyframe(for: \.alpha, at: 1, value: 1)

假设我们定义了一个名为 BinaryView 的视图,该视图有两个子视图,分别为 leftViewrightView,并且我们想要按顺序高亮显示这些子视图。我们可以在 BinaryView 上定义一个动画,包含两个子动画

var binaryAnimation = Animation<BinaryView>()
binaryAnimation.addChild(highlightAnimation, for: \.leftView, startingAt: 0, relativeDuration: 0.5)
binaryAnimation.addChild(highlightAnimation, for: \.rightView, startingAt: 0.5, relativeDuration: 0.5)

设置好视图并准备执行动画后,我们可以调用 perform 方法开始动画

let view = BinaryView()
// ...

binaryAnimation.perform(on: view)

运行示例应用

Stagehand 附带一个示例应用,展示了该框架提供的许多功能示例。要运行示例应用,打开 Example 目录并运行

bundle install
bundle exec pod install
open Stagehand.xcworkspace

从这里,您可以运行示例应用并查看如何使用框架的多种示例。在该工作区中,还有一个包含每个功能的工作室文档和教程。

贡献

我们对您对 Stagehand 的兴趣感到高兴,并希望能够看到它的发展方向。在提交拉取请求之前,请阅读我们的 贡献指南

许可协议

Copyright 2020 Square, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.