Merge remote-tracking branch 'origin/develop' into bugfix/CXTDT-82220
This commit is contained in:
commit
af2425e296
@ -6,7 +6,6 @@
|
|||||||
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
// Copyright © 2019 Verizon Wireless. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
|
|
||||||
@objcMembers open class LeftRightLabelView: View {
|
@objcMembers open class LeftRightLabelView: View {
|
||||||
@ -111,7 +110,7 @@ import Foundation
|
|||||||
|
|
||||||
bottomAnchor.constraint(greaterThanOrEqualTo: leftTextLabel.bottomAnchor).isActive = true
|
bottomAnchor.constraint(greaterThanOrEqualTo: leftTextLabel.bottomAnchor).isActive = true
|
||||||
|
|
||||||
rightTextLabelLeading = rightTextLabel.leadingAnchor.constraint(equalTo: leftTextLabel.trailingAnchor, constant: Padding.Four)
|
rightTextLabelLeading = rightTextLabel.leadingAnchor.constraint(greaterThanOrEqualTo: leftTextLabel.trailingAnchor, constant: Padding.Four)
|
||||||
rightTextLabelLeading?.isActive = true
|
rightTextLabelLeading?.isActive = true
|
||||||
|
|
||||||
rightTextLabel.topAnchor.constraint(equalTo: topAnchor).isActive = true
|
rightTextLabel.topAnchor.constraint(equalTo: topAnchor).isActive = true
|
||||||
@ -133,7 +132,6 @@ import Foundation
|
|||||||
rightTextWidth.priority = UILayoutPriority(rawValue: 995)
|
rightTextWidth.priority = UILayoutPriority(rawValue: 995)
|
||||||
rightTextWidth.isActive = true
|
rightTextWidth.isActive = true
|
||||||
|
|
||||||
rightTextLabel.setContentHuggingPriority(.required, for: .horizontal)
|
|
||||||
leftTextLabel.setContentCompressionResistancePriority(.required, for: .vertical)
|
leftTextLabel.setContentCompressionResistancePriority(.required, for: .vertical)
|
||||||
rightTextLabel.setContentCompressionResistancePriority(.required, for: .vertical)
|
rightTextLabel.setContentCompressionResistancePriority(.required, for: .vertical)
|
||||||
rightTextLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
|
rightTextLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import UIKit
|
|||||||
@objcMembers open class Wheel: View, MVMCoreUIViewConstrainingProtocol {
|
@objcMembers open class Wheel: View, MVMCoreUIViewConstrainingProtocol {
|
||||||
|
|
||||||
var heightConstraint: NSLayoutConstraint?
|
var heightConstraint: NSLayoutConstraint?
|
||||||
var gradientLayer: CALayer?
|
weak var gradientLayer: CALayer?
|
||||||
var graphModel: WheelModel? {
|
var graphModel: WheelModel? {
|
||||||
return model as? WheelModel
|
return model as? WheelModel
|
||||||
}
|
}
|
||||||
@ -19,8 +19,6 @@ import UIKit
|
|||||||
// MARK: setup
|
// MARK: setup
|
||||||
open override func setupView() {
|
open override func setupView() {
|
||||||
super.setupView()
|
super.setupView()
|
||||||
//avoid adding height constraint multiple times
|
|
||||||
guard heightConstraint == nil else { return }
|
|
||||||
heightConstraint = heightAnchor.constraint(equalToConstant: 0)
|
heightConstraint = heightAnchor.constraint(equalToConstant: 0)
|
||||||
heightConstraint?.isActive = true
|
heightConstraint?.isActive = true
|
||||||
widthAnchor.constraint(equalTo: heightAnchor).isActive = true
|
widthAnchor.constraint(equalTo: heightAnchor).isActive = true
|
||||||
@ -51,6 +49,31 @@ import UIKit
|
|||||||
}
|
}
|
||||||
heightConstraint?.constant = graphObject.diameter
|
heightConstraint?.constant = graphObject.diameter
|
||||||
|
|
||||||
|
// iOS 12 uses the conic gradient and a mask for simplicity.
|
||||||
|
if #available(iOS 12, *) {
|
||||||
|
let gradient = CAGradientLayer()
|
||||||
|
gradient.type = .conic
|
||||||
|
gradient.startPoint = CGPoint(x: 0.5, y: 0.5)
|
||||||
|
gradient.endPoint = CGPoint(x: 0.5, y: 0.0)
|
||||||
|
gradient.frame = CGRect(x: 0, y: 0, width: graphObject.diameter, height: graphObject.diameter)
|
||||||
|
gradient.colors = graphObject.colors.map({ (color) -> CGColor in
|
||||||
|
return color.cgColor
|
||||||
|
})
|
||||||
|
gradientLayer = gradient
|
||||||
|
layer.addSublayer(gradient)
|
||||||
|
|
||||||
|
let center = CGPoint(x: gradient.bounds.midX, y: gradient.bounds.midY)
|
||||||
|
let radius = (graphObject.diameter - graphObject.lineWidth) / 2.0
|
||||||
|
let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: (3 / 2 * .pi), endAngle: -(1 / 2 * .pi), clockwise: false)
|
||||||
|
let mask = CAShapeLayer()
|
||||||
|
mask.fillColor = UIColor.clear.cgColor
|
||||||
|
mask.strokeColor = UIColor.white.cgColor
|
||||||
|
mask.lineWidth = graphObject.lineWidth
|
||||||
|
mask.path = path.cgPath
|
||||||
|
gradient.mask = mask
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
//create circle path
|
//create circle path
|
||||||
let radius = graphObject.diameter / 2.0
|
let radius = graphObject.diameter / 2.0
|
||||||
|
|
||||||
@ -170,20 +193,9 @@ import UIKit
|
|||||||
rotation.timingFunction = CAMediaTimingFunction(name: .linear)
|
rotation.timingFunction = CAMediaTimingFunction(name: .linear)
|
||||||
rotation.fillMode = .both
|
rotation.fillMode = .both
|
||||||
rotation.isRemovedOnCompletion = false
|
rotation.isRemovedOnCompletion = false
|
||||||
|
rotation.repeatCount = Float.greatestFiniteMagnitude
|
||||||
|
|
||||||
//avoid infinity animation take high CPU momery usage when layer is not displayed
|
|
||||||
rotation.delegate = self
|
|
||||||
rotation.repeatCount = 1
|
|
||||||
self.gradientLayer?.add(rotation, forKey: "rotation")
|
self.gradientLayer?.add(rotation, forKey: "rotation")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extension Wheel: CAAnimationDelegate {
|
|
||||||
public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
|
|
||||||
if let object = graphModel {
|
|
||||||
rotationAnimation(object)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user