UIWindowTransitions 1.0.0

UIWindowTransitions 1.0.0

Daniele Margutti 维护。



UIWindowTransitions

为 UIWindow 添加动画过渡效果

这是一个小型项目,用它演示如何用一小段代码实现 UIWindow 的 rootViewController 过渡。您可以在这里找到该文章的原始版本。

动机

在某些情况下,您可能需要在应用程序的生命周期中更改主 UIWindowrootViewController,一个典型的例子可能是从初始引导程序到应用程序首页(例如,一个 UITabBarController)的过渡。

为了处理这种边缘情况,您可能想要创建一个顶级控制器(通常是一个带有不可见导航栏的 UINavigationController),这样您就可以使用标准推动动画将新容器推入。

虽然这种方式基本可行,但仅为了处理这个单一操作而添加容器,看起来有点糟糕。

更好的解决方案是对设置的 rootViewController 应用动画过渡(推动/弹回或滑动),从而从当前视图控制器到新视图控制器进行平滑的动画切换。

实际上,即使是未公开的,您可以使用 CoreAnimationCATransition 来实现这一点,并且非常简单。

以下代码是作为 UIWindow 类的扩展实现的新功能;它接受两个参数:目标控制器和选项。

如你所想,目标控制器是你想要设置为新的 rootViewController 的控制器,而选项是用于分组一些典型的 CoreAnimation 设置的结构:动画方向(从顶部或底部推动/弹回)、动画曲线(线性、 ease in/out)、动画持续时间(默认为 0.25s)以及用于在旧视图和新视图之间淡入/淡出的可选 UIView 实例。

已知问题及修复

1.0.0 修复了 iOS 目前在 这里 打开的 issue。这个修复由 voltbank 在他的 repository(从该项目分叉而来 ReplaceRootViewController)中创建。

❤️您的支持

您好,开发者朋友!
维护和开发工具需要消耗资源和时间。虽然我喜欢制作它们,但您的支持是我继续其开发的关键。

如果您正在使用SwiftLocation或我的其他创作,请考虑以下选项:

如何使用它

实施后,您可以使用仅对所有UIWindow实例公开的函数进行操作

func set(rootViewController newRootViewController: UIViewController, options: TransitionOptions = TransitionOptions(), _ completion:((Bool) -> Void)? = nil)

其中

  • controllerrootViewController的目标视图控制器
  • options:包含以下属性的TransitionOptions
    • duration:动画持续时间(用TimeInterval表示,秒,默认为0.25
    • direction:过渡方向(toRighttoLefttoToptoBottom,默认为.toRight
    • style:动画曲线(lineareaseIneaseOuteaseInOut,默认为.linear
    • background:淡入淡出到旧/新控制器的背景视图(默认为nil)。
  • completion:完成回调,以便在过渡完成后接收信息。

以下代码使用0.4秒的淡出滑动动画更改rootViewController

let wnd = UIApplication.shared.keyWindow
var options = UIWindow.TransitionOptions()
options.direction = .toTop
options.duration = 0.4
options.style = .easeOut
wnd?.set(rootViewController(newVC, options: options)

如果您只需要简单的推送(如UINavigationController的推送),您可以在没有options参数的情况下调用它。

wnd?.set(rootViewController(newVC)

示例应用

以下示例可在项目的示例应用程序内找到。

安装

您可以使用CocoaPods、Carthage和Swift包管理器安装UIWindowTransitions。

pod 'UIWindowTransitions'

CocoaPods

use_frameworks!
pod 'UIWindowTransitions'

Swift软件包管理器

在您的Package.swift中将UIWindowTransitions添加为依赖项

import PackageDescription

let package = Package(name: "YourPackage",
	dependencies: [
		.Package(url: "https://github.com/malcommac/UIWindowTransitions.git", majorVersion: 0),
	]
)

贡献

  • 如果您需要帮助或想提出一般性问题,请创建一个issue。
  • 如果您发现了一个bug,请创建一个issue。
  • 如果您有一个功能请求,请创建一个issue。
  • 如果您想贡献,请提交一个pull request。

版权与致谢

UIWindowTransitions 目前由 Daniele Margutti 拥有并维护。
您可以在Twitter上关注我 @danielemargutti
我的网站是 https://www.danielemargutti.com

此软件遵循 MIT 许可证

关注我