一个可自定义的动画渐变加载条。灵感来源于 Codepen 上的 iOS 7 进度条。
要运行示例项目,请克隆仓库,并从 Example 目录打开工作区。
注意:如果您需要支持低于 iOS 13 的版本,您可以回退到 2.X.X
版本。
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问其网站。要使用 CocoaPods 将 GradientLoadingBar 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
pod 'GradientLoadingBar', '~> 3.0'
Carthage 是一个去中心化的依赖管理器,它可以构建您的依赖项并为您提供二进制框架。要使用 Carthage 将 GradientLoadingBar 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它。
github "fxm90/GradientLoadingBar" ~> 3.0
运行 carthage update 来构建框架,并将构建的 GradientLoadingBar.framework
拖到您的 Xcode 项目中。
Swift Package Manager 是一种用于自动分发 Swift 代码的工具,它集成到 swift
编译器中。它尚处于早期开发阶段,但 Gradient Loading Bar 确实支持在支持的平台上使用它。
一旦你设置好了你的 Swift 包,添加 Gradient Loading Bar 作为依赖就像把它添加到你的 Package.swift
的 dependencies
值中一样简单。
dependencies: [
.package(url: "https://github.com/fxm90/GradientLoadingBar", from: "3.0.0")
]
该框架提供四个类
GradientActivityIndicatorView
的可见性。GradientLoadingBar
的一个子类,将 GradientActivityIndicatorView
围绕 iPhone 的刘海包裹起来。UIView
。它可以作为子视图添加到另一个视图中,无论是在界面生成器中还是以编程方式。这两种方式都在示例应用程序中展示。View
,包含渐变和动画。该视图可以添加到任何其他 SwiftUI 视图。示例应用程序还包含此用例的示例代码。要开始使用,请将模块 GradientLoadingBar
导入到您的文件中,并将 GradientLoadingBar()
的实例保存在您的视图控制器的属性中。要显示加载条,只需调用 fadeIn(duration:completion)
方法,并在您的异步操作完成后调用 fadeOut(duration:completion)
方法。
final class UserViewController: UIViewController {
private let gradientLoadingBar = GradientLoadingBar()
// ...
override func viewDidLoad() {
super.viewDidLoad()
gradientLoadingBar.fadeIn()
userService.loadUserData { [weak self] _ in
// ...
// Be sure to call this on the main thread!
self?.gradientLoadingBar.fadeOut()
}
}
}
您可以通过使用可选参数 height
和 isRelativeToSafeArea
调用初始化程序来覆盖默认配置。
let gradientLoadingBar = GradientLoadingBar(
height: 4.0,
isRelativeToSafeArea: true
)
通过设置此参数,您可以设置加载条的高度(默认为 3.0
)
使用此参数,您可以配置加载条是否应相对于安全区域定位(默认为 true
)。
isRelativeToSafeArea
设置为 true
的示例。
isRelativeToSafeArea
设置为 false
的示例。
还有第三个选项,它会将加载条包裹在 iPhone 的刘海周围。有关更多详细信息,请参阅类 NotchGradientLoadingBar
的文档。
此属性调整加载条上显示的渐变颜色。
此属性调整动画将渐变从左向右移动的持续时间。
此方法淡入加载条。 您可以使用相应的参数调整持续时间。 此外,您可以传入一个完成处理程序,该处理程序在动画完成后调用。
此方法淡出加载条。 您可以使用相应的参数调整持续时间。 此外,您可以传入一个完成处理程序,该处理程序在动画完成后调用。
如果您需要在应用程序的多个/不同部分中使用加载条,您可以使用给定的静态 shared
变量
GradientLoadingBar.shared.fadeIn()
// Do e.g. server calls etc.
GradientLoadingBar.shared.fadeOut()
如果您希望自定义共享实例,您可以将以下代码添加到您的应用程序委托 didFinishLaunchingWithOptions
方法中,并覆盖 shared
变量
GradientLoadingBar.shared = GradientLoadingBar(height: 5.0)
GradientLoadingBar
的这个子类会将加载条包裹在 iPhone 的刘海周围。
对于没有安全区域的 iPhone,该行为与上述 GradientLoadingBar
的文档中提到的相同。
let notchGradientLoadingBar = NotchGradientLoadingBar(
height: 3.0
)
如果您不想将加载条添加到主窗口,此框架提供了 GradientActivityIndicatorView
,它是 UIView
的直接子类。您可以将视图添加到另一个视图中,无论是在界面生成器中还是以编程方式。
例如,将 View 作为子视图添加到 UINavigationBar
。
进度动画根据 isHidden
标志开始和停止。 将此标志设置为 false
将启动动画,将其设置为 true
将停止动画。 通常,您不想直接显示/隐藏视图,而是平滑地淡入或淡出。 因此,视图提供了方法 fadeIn(duration:completion)
和 fadeOut(duration:completion)
。 基于 gist UIView+AnimateAlpha.swift
,这些方法调整视图的 alpha
值并相应地更新 isHidden
标志。
此属性调整加载条上显示的渐变颜色。
此属性调整动画将渐变从左向右移动的持续时间。
要在一个真实的应用程序中查看所有这些屏幕截图,请查看示例应用程序。 对于进一步的自定义,您还可以子类化 GradientLoadingBar
并覆盖方法 setupConstraints()
。
这是 GradientActivityIndicatorView
的 SwiftUI 变体。 可以通过传递给初始化程序的两个参数 gradientColors: [Color]
和 progressDuration: TimeInterval
来配置视图。
此参数调整加载条上显示的渐变颜色。
此参数调整动画将渐变从左向右移动的持续时间。
视图的可见性可以使用视图修饰符 opacity()
或 hidden()
来更新。
要动画化可见性更改,您需要创建一个带有 @State
属性包装器的属性,并从 withAnimation
块更新该值,例如
struct ExampleView: some View {
@State
private var isVisible = false
var body: some View {
VStack {
GradientLoadingBarView()
.frame(maxWidth: .infinity, maxHeight: 3)
.cornerRadius(1.5)
.opacity(isVisible ? 1 : 0)
Button("Toggle visibility") {
withAnimation(.easeInOut) {
isVisible.toggle()
}
}
}
}
}
不幸的是,Interface Builder 对 Cocoapods 框架的支持目前已损坏。 如果您需要 Interface Builder 支持,请将以下代码添加到您的 Podfile 中并再次运行 pod install
。 之后,您应该可以在 Interface Builder 中使用 GradientLoadingBar
:)
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
next unless config.name == 'Debug'
config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = [
'$(FRAMEWORK_SEARCH_PATHS)'
]
end
end
Felix Mau (me(@)felix.hamburg)
GradientLoadingBar 在 MIT 许可下可用。 有关更多信息,请参见 LICENSE 文件。