私は同様の仕事をしていて、今日これを実装することができました。私は最も簡単な方法は現在のUIを強化して、進捗サークルを扱う部分だけで作業することだと思います。
私の場合は、UIButtonのサブクラスである「UIButtonEnhanced」という新しいクラスを作成しました。
インタフェースビルダーでは、まずボタンのクラスを「UIButtonEnhanced」に変更してから、コンセントを作成する必要があります。ダウンロードが変更を進行するときに使用、その後、このコード
yourButton.drawCircle()
:
yourButton.progress = 0.5
あなたのダウンロード状況をあなたのViewControllerで
enum DownloadStatus {
case remote
case downloading
case paused
case resumed
case success
}
// MARK: extension is not ideal, a better solution should be a subclass of UIButton
class UIButtonEnhanced: UIButton {
var progress: Float = 0 {
didSet {
circleShape.strokeEnd = CGFloat(self.progress)
}
}
var circleShape = CAShapeLayer()
public func drawCircle() {
let x: CGFloat = 0.0
let y: CGFloat = 0.0
let circlePath = UIBezierPath(roundedRect: CGRect(x: x, y: y, width: self.frame.height, height: self.frame.height), cornerRadius: self.frame.height/2).cgPath
circleShape.path = circlePath
circleShape.lineWidth = 3
circleShape.strokeColor = UIColor.white.cgColor
circleShape.strokeStart = 0
circleShape.strokeEnd = 0
circleShape.fillColor = UIColor.clear.cgColor
self.layer.addSublayer(circleShape)
}
// MARK: - Update the download status
var status: DownloadStatus = .remote {
didSet{
var buttonImageName = ""
switch self.status {
case .remote:
buttonImageName = "DownloadButton"
case .downloading:
buttonImageName = "PauseButton"
case .success:
buttonImageName = "DeleteButton"
case .paused:
buttonImageName = "DownloadButton"
case .resumed:
buttonImageName = "PauseButton"
}
self.setImage(UIImage(named: buttonImageName), for: .normal)
}
}
}
は、次のコードを使用して円を作成することができます変更、このコードを使用:
yourButton.status = .success
cocoascontrolから見つけることができます。このリンクは参考用に使用しています。https://github.com/mrackwitz/MRProgressとhttps://github.com/PavelKatunin/DownloadButton –
ありがとうございました:) – victorious
: u。 –