Documentation/README.zh.md
IBAnimatable 是一个帮助我们在 Interface Builder 和 Swift Playground 里面设计 UI, 交互, 导航模式, 换场和动画的开源库。
整个 App 都是通过 IBAnimatable 在 Interface Builder 设计完成,没有任何一行代码。由于 Dribbble GIF 文件大小的限制,这只演示了部分功能,完整功能可以在 YouTube 或者 MP4 on Github 上看到。
上面是该 App 在 Interface Builder 的 Storyboard 中的设计。
2015 年 Designer News 热门文章中,前 20 篇里面有一半左右的文章是讨论如何快速制作可交换的原型,例如 Adobe 公司在开发 Project Comet 原型工具来补救日益被 Sketch 迅速占领的市场。这些工具都有一个特点:“快”。“快”成为移动开发领域唯不可破的法宝,因为无论那个 App 都需要在不断的迭代中逐步完善和发展。但是目前这些工具都没法提供一个端到端的解决方案,很多工具生成的原型没办法直接使用在最终的 App 中,或者需要在 Xcode 和 Interface Builder 里重做原型中的设计,交换以及动画。这是一个很大的痛点,IBAnimatable 的诞生是为了解决这个痛点。IBAnimatable 提供从想法到最终 App 产品的设计工具,帮助我们在 Interface Builder 和 Swift Playground 里面设计 UI, 交互, 导航模式, 换场和动画。
IBAnimatable 同时提供 Unwind Segue 来返回前一个页面,可以省去编写代码的步骤。IBAnimatable 使用了 protocol-oriented 编程模式,使得项目非常容易扩张,并且可以方便的制作出自己的自定义控件。IBAnimatable 快速地执行可交互的原型。IBAnimatable 的 extension 制作另外的控件库,例如 Material 控件等。要了解和学习 IBAnimatable,我们可运行示例 App,并在 Interface Builder 中修改相关的配置来查看设计的结果。
$ git clone https://github.com/IBAnimatable/IBAnimatable.git
$ cd IBAnimatable
$ open IBAnimatable.xcodeproj
使用 IBAnimatable 在 Interface Builder 里设计 UI 和动画,只需要下面简单的几步:
Animatable 的 UI 控件类,Animatable 的文档可以在 APIs.md 找到。尽管我们可以在 Attribute Inspector 里配置动画,但是 Interface Builder 还不支持预览动画。但幸运的是我们可以在 Swift Playground 里设计和预览动画。你可以在 IBAnimatable.playground 看到如何设计和预览动画。首先选择一个Playground 的页,然后点击 "Assistant editor" 按钮来呈现右边的预览页。接着选择右上角的 "Timeline" 来预览动画。我们可以使用 Xcode 的 "Editor" -> "Execute" 菜单来重新执行 Playground 的动画。
在上面我们已经看到,我们可以不需要任何代码就能在 Interface Builder 进行设计,但是 IBAnimatable 还提供编程接口来让我们完全控制UI和动画。IBAnimatable 提供了例如 pop() 那样简单的 API,我们只需要一行代码就能执行动画。
view.pop(repeatCount: 1) // pop animation for the view
view.squeezeFade(.in, direction:.left) // squeeze and fade in from left animation
在 Swift Playground Page - Predefined Animations 里面我们可以尝试不同的动画。
我们可以进一步个性化我们的动画。我们只需要在调用 animate() 方法的时候把相关参数传递即可。
view.animate(.squeeze(way: .in, direction: .left), duration: 1, damping: 1, velocity: 2, force: 1)
在 Swift playground Page - Animation Properties 里面我们可以尝试不同的属性的动画。
IBAnimatable 提供了类 Promise 的动画 API 来串联动画。
// We can chain the animations together, it is the source code of animated GIF in "Animate in Swift playground" section
view.animate(.squeezeFade(way: .in, direction: .down))
.then(.pop(repeatCount: 1))
.then(.shake(repeatCount: 1))
.then(.squeeze(way: .in, direction: .down))
.then(.wobble(repeatCount: 1))
.then(.flip(along: .x))
.then(.flip(along: .y))
.then(.slideFade(way: .out, direction: .down))
我们只需要调用 delay 方法来延时动画。
view.animate(.squeeze(way: .in, direction: .left))
.delay(0.5)
.then(.shake(repeatCount: 3))
我们甚至可以把 delay 作为第一个方法来调用。
view.delay(2)
.then(.squeeze(way: .in, direction: .left))
我们可以在动画执行完毕以后调用回调函数。
view.animate(.squeeze(way: .in, direction: .left))
.completion { print("Animations finished!") }
把 IBAnimatable 文件夹拷贝到你的 Xcode 项目中
在 Package.swift 中添加 .Package(url: "https://github.com/IBAnimatable/IBanimatable.git", majorVersion: 6) 。
在 Podfile 中添加 pod 'IBAnimatable' 。
在 Cartfile 中添加 github "IBAnimatable/IBAnimatable" 。
你一定很熟悉 Git,应该不用我多说了,把这个 Repo 作为一个 submodule ,并把项目文件加到你的 workspace 里面,然后把 IBAnimatable.framework 放到你的应用程序的 Target 里面。
完整的文档请参考 IBAnimatable APIs。
我们每个人都可以为这个项目进行贡献。高效的工具使得我们有更多的时间来开发高质量的App,当然也有更多的时间享受生活🍻。
如果你是一名设计师,你可以使用 IBAnimatable 在 Interface Builder 里进行设计,甚至不需要任何像 Sketch 这样设计工具,或者把现有的 Sketch 或 Photoshop 在 Interface Builder 快速实现。有了 IBAnimatable,绝大部分的功能都可以 Interface Builder 里面完成。如果你需要新功能,请提交一个 GitHub Issue。如果你使用 IBAnimatable 进行设计,请通过 Pull Request 或者 GitHub Issue 来通知我们,我们可以把它放在 Readme 文件里面。
如果你是一名开发者,你可以实现功能或者修改 Bug,Backlog 可以在GitHub Issues 找到。如果你在你的 App 里面使用了 IBAnimatable,请通过 Pull Request 或者 GitHub Issue 来通知我们,我们可以把它放在 Readmd 文件里面。
如果你英语不错,来改一下我的英语吧😁。如果你还会其他语言,创建或者修改其他语言的 Readme 文件吧。
如果你喜欢这个项目,请告诉其他设计师和开发者,记住 Star🌟 这个项目哦。 🤗
IBAnimatable is released under the MIT license. See LICENSE for details.