diff --git a/Signal/src/ViewControllers/ConversationView/Cells/MediaDownloadView.swift b/Signal/src/ViewControllers/ConversationView/Cells/MediaDownloadView.swift index 5be0d8034..23c39364c 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/MediaDownloadView.swift +++ b/Signal/src/ViewControllers/ConversationView/Cells/MediaDownloadView.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import Foundation @@ -17,7 +17,8 @@ public class MediaDownloadView: UIView { private let attachmentId: String private let radius: CGFloat - private let shapeLayer = CAShapeLayer() + private let shapeLayer1 = CAShapeLayer() + private let shapeLayer2 = CAShapeLayer() @objc public required init(attachmentId: String, radius: CGFloat) { @@ -26,7 +27,10 @@ public class MediaDownloadView: UIView { super.init(frame: .zero) - layer.addSublayer(shapeLayer) + shapeLayer1.zPosition = 1 + shapeLayer2.zPosition = 2 + layer.addSublayer(shapeLayer1) + layer.addSublayer(shapeLayer2) NotificationCenter.default.addObserver(forName: NSNotification.Name.attachmentDownloadProgress, object: nil, queue: nil) { [weak self] notification in guard let strongSelf = self else { return } @@ -68,11 +72,13 @@ public class MediaDownloadView: UIView { internal func updateLayers() { AssertIsOnMainThread() - shapeLayer.frame = self.bounds + shapeLayer1.frame = self.bounds + shapeLayer2.frame = self.bounds guard let progress = attachmentDownloads.downloadProgress(forAttachmentId: attachmentId) else { Logger.warn("No progress for attachment.") - shapeLayer.path = nil + shapeLayer1.path = nil + shapeLayer2.path = nil return } @@ -87,13 +93,26 @@ public class MediaDownloadView: UIView { let startAngle: CGFloat = CGFloat.pi * 1.5 let endAngle: CGFloat = CGFloat.pi * (1.5 + 2 * CGFloat(progress.floatValue)) - let bezierPath = UIBezierPath() - bezierPath.addArc(withCenter: center, radius: outerRadius, startAngle: startAngle, endAngle: endAngle, clockwise: true) - bezierPath.addArc(withCenter: center, radius: innerRadius, startAngle: endAngle, endAngle: startAngle, clockwise: false) - - shapeLayer.path = bezierPath.cgPath - let fillColor: UIColor = (Theme.isDarkThemeEnabled ? .ows_gray45 : .ows_gray60) - shapeLayer.fillColor = fillColor.cgColor + let bezierPath1 = UIBezierPath() + bezierPath1.append(UIBezierPath(ovalIn: CGRect(origin: center.minus(CGPoint(x: innerRadius, + y: innerRadius)), + size: CGSize(width: innerRadius * 2, + height: innerRadius * 2)))) + bezierPath1.append(UIBezierPath(ovalIn: CGRect(origin: center.minus(CGPoint(x: outerRadius, + y: outerRadius)), + size: CGSize(width: outerRadius * 2, + height: outerRadius * 2)))) + shapeLayer1.path = bezierPath1.cgPath + let fillColor1: UIColor = UIColor(white: 1.0, alpha: 0.4) + shapeLayer1.fillColor = fillColor1.cgColor + shapeLayer1.fillRule = kCAFillRuleEvenOdd + + let bezierPath2 = UIBezierPath() + bezierPath2.addArc(withCenter: center, radius: outerRadius, startAngle: startAngle, endAngle: endAngle, clockwise: true) + bezierPath2.addArc(withCenter: center, radius: innerRadius, startAngle: endAngle, endAngle: startAngle, clockwise: false) + shapeLayer2.path = bezierPath2.cgPath + let fillColor2: UIColor = (Theme.isDarkThemeEnabled ? .ows_gray25 : .ows_white) + shapeLayer2.fillColor = fillColor2.cgColor CATransaction.commit() }