Stagehand
Stagehand为在iOS上构建动画提供了一种现代、类型安全的API。Stagehand围绕几个核心思想设计
- 结构组合 - Stagehand使构建由小型、可重用且易于推理的小部件组成的大型、多部分动画变得容易。
- 构建与执行的分离 - Stagehand为构建和执行提供独立的机制,这增加了动画的灵活性,并使得类似排队一系列动画这样的概念能够直截了当工作。
- 编译时安全性 - Stagehand使用现代Swift特性为定义动画提供编译时安全的API。
- 可测试性 - Stagehand基于快照测试的概念,引入了动画的视觉测试范例。
安装
CocoaPods
通过CocoaPods安装Stagehand,只需将以下行添加到您的Podfile中:
pod 'Stagehand'
要安装StagehandTesting,动画快照测试实用工具,请将以下行添加到您的Podfile中的测试目标定义中:
pod 'StagehandTesting'
默认情况下,这将使用Point-Free的SnapshotTesting来记录快照并进行比较。如果要使用Uber的iOSSnapshotTestCase作为快照引擎,请将您的测试目标依赖项设置为使用iOSSnapshotTestCase
子规范。
pod 'StagehandTesting/iOSSnapshotTestCase'
Swift 包管理器
要通过 Swift 包管理器 安装 Stagehand,请在您的 Package.swift
文件中添加以下内容
dependencies: [
.package(url: "https://github.com/cashapp/stagehand", from: "4.0.0"),
],
Stagehand 入门
动画开始于构建一个 Animation
。一个 Animation
在一个元素类型上自宿,并作为该元素应当如何动画化的定义。
例如,我们可以编写一个动画,通过淡出 alpha 值到 0.8 并返回来突出显示一个视图
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
,它有两个子视图,leftView
和 rightView
,我们想按顺序突出显示每个子视图。我们可以在两个子动画中为我们的 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 包括一个演示应用,展示了 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.