AHDownloadButton 是一款可定制的下载按钮,类似于 Apple App Store 应用最新版本(自 iOS 11 起)中的下载按钮。它具有下载进度动画以及下载状态之间的动画过渡:开始下载、等待中、下载中和已下载。 您可以在我的博客上找到有关实现的更多详细信息。
要在代码中使用 AHDownloadButton,您只需创建一个新实例,并将其作为子视图添加到您想要的视图中。
let downloadButton = AHDownloadButton()
downloadButton.frame = CGRect(origin: origin, size: size)
view.addSubview(downloadButton)
该按钮可以有 4 种不同的状态
startDownload - 下载前的初始状态pending - 准备下载的状态downloading - 用户正在下载时的状态downloaded - 用户完成下载时的状态可以通过其 state 属性更改按钮的状态。
您可以使用 AHDownloadButtonDelegate 来监控按钮上的点击事件,并在需要时更新按钮的状态。要更新当前的下载进度,请使用 progress 属性。 这是一个如何实现的示例
extension DownloadViewController: AHDownloadButtonDelegate {
func downloadButton(_ downloadButton: AHDownloadButton, tappedWithState state: AHDownloadButton.State)
switch state {
case .startDownload:
// set the download progress to 0
downloadButton.progress = 0
// change state to pending and wait for download to start
downloadButton.state = .pending
// initiate download and update state to .downloading
startDownloadingFile()
case .pending:
// button tapped while in pending state
break
case .downloading:
// button tapped while in downloading state - stop downloading
downloadButton.progress = 0
downloadButton.state = .startDownload
case .downloaded:
// file is downloaded and can be opened
openDownloadedFile()
}
}
}
您还可以使用闭包而不是 AHDownloadButtonDelegate,方法是设置 didTapDownloadButtonAction 和 downloadButtonStateChangedAction 属性。
AHDownloadButton 可以被定制。以下是可以用来定制按钮的属性
使用自定义初始化器 init(alignment: HorizontalAlignment) 来设置水平对齐属性。 HorizontalAlignment 决定了等待中和下载中圆圈的位置。 位置可以是 center、left 或 right。 默认值为 center。
当按钮处于 startDownload 状态时的自定义属性
startDownloadButtonTitle - 按钮的标题startDownloadButtonTitleFont - 按钮的标题字体startDownloadButtonTitleSidePadding - 按钮标题左右两侧的内边距startDownloadButtonHighlightedBackgroundColor - 当按钮处于高亮状态时(当用户按下按钮时)的背景颜色startDownloadButtonNonhighlightedBackgroundColor - 当按钮处于非高亮状态时(当按钮未被按下时)的背景颜色startDownloadButtonHighlightedTitleColor - 当按钮处于高亮状态时(当用户按下按钮时)的标题颜色startDownloadButtonNonhighlightedTitleColor - 当按钮处于非高亮状态时(当按钮未被按下时)的标题颜色pending 状态时的自定义属性pendingCircleColor - 等待中圆圈的颜色pendingCircleLineWidth - 等待中圆圈的宽度downloading 状态时的自定义属性downloadingButtonHighlightedTrackCircleColor - 当按钮处于高亮状态时(当用户按下按钮时)的轨道圆圈的颜色downloadingButtonNonhighlightedTrackCircleColor - 当按钮处于非高亮状态时(当按钮未被按下时)的轨道圆圈的颜色downloadingButtonHighlightedProgressCircleColor - 当按钮处于高亮状态时(当用户按下按钮时)的进度圆圈的颜色downloadingButtonNonhighlightedProgressCircleColor - 当按钮处于非高亮状态时(当按钮未被按下时)的进度圆圈的颜色downloadingButtonHighlightedStopViewColor - 当按钮处于高亮状态时(当用户按下按钮时)的进度圆圈中间的停止视图的颜色downloadingButtonNonhighlightedStopViewColor - 当按钮处于非高亮状态时(当按钮未被按下时)的进度圆圈中间的停止视图的颜色downloadingButtonCircleLineWidth - 下载中圆圈的宽度downloaded 状态时的自定义属性downloadedButtonTitle - 按钮的标题downloadedButtonTitleFont - 按钮的标题字体downloadedButtonTitleSidePadding - 按钮标题左右两侧的内边距downloadedButtonHighlightedBackgroundColor - 当按钮处于高亮状态时(当用户按下按钮时)的背景颜色downloadedButtonNonhighlightedBackgroundColor - 当按钮处于非高亮状态时(当按钮未被按下时)的背景颜色downloadedButtonHighlightedTitleColor - 当按钮处于高亮状态时(当用户按下按钮时)的标题颜色downloadedButtonNonhighlightedTitleColor - 当按钮处于非高亮状态时(当按钮未被按下时)的标题颜色transitionAnimationDuration - 按钮不同状态之间的动画持续时间AHDownloadButton 在 startDownload 和 downloaded 状态下会根据按钮标题计算其宽度。 使用 startDownloadButtonTitleSidePadding 和 downloadedButtonTitleSidePadding 属性来定制按钮处于上述状态时的宽度。
要运行示例项目,请克隆 repo,并首先从 Example 目录运行 pod install。
CocoaPods 是 Cocoa 项目的依赖管理工具。 您可以使用以下命令安装它
$ gem install cocoapods
要使用 CocoaPods 将 AHDownloadButton 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
target '<Your Target Name>' do
pod 'AHDownloadButton'
end
然后,运行以下命令
$ pod install
Carthage 是一个分散的依赖管理工具,它构建您的依赖项并为您提供二进制框架。 要使用 Carthage 将 AHDownloadButton 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它
github "amerhukic/AHDownloadButton" ~> 1.3.0
Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并已集成到 swift 编译器中。
设置好 Swift 包后,将 AHDownloadButton 添加为依赖项就像将其添加到 Package.swift 的 dependencies 值一样简单。
dependencies: [
.package(url: "https://github.com/amerhukic/AHDownloadButton", .upToNextMajor(from: "1.3.0"))
]
AHDownloadButton 在 MIT 许可下获得许可。 有关详细信息,请查看 LICENSE 文件。