AHDownloadButton 是一个可定制的下载按钮,类似于 Apple 的 App Store 应用(从 iOS 11 开始)上的下载按钮。它具有下载进度动画以及各个下载状态之间的动画转换:开始下载、待处理、正在下载和下载完成。您可以在我的博客上找到更多关于实现细节的说明(链接)。
要求
- iOS 8.0+
- Xcode 9.0+
- Swift 4.0+
用法
代码
要在代码中使用 AHDownloadButton
,您只需创建一个新的实例并将其添加到您希望 view 的子视图中
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()
}
}
}
您还可以通过设置 didTapDownloadButtonAction
和 downloadButtonStateChangedAction
属性来使用闭包代替 AHDownloadButtonDelegate
。
自定义
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
属性来自定义上述状态下的按钮宽度。
示例
要运行示例项目,首先克隆仓库,然后从示例目录运行 pod install
。
安装
CocoaPods
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
作者
许可协议
AHDownloadButton 采用 MIT 许可协议。请查阅 LICENSE 文件以获取详细信息。