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 文件。