diff --git a/VDSSample/ViewControllers/DropShawdowViewController.swift b/VDSSample/ViewControllers/DropShawdowViewController.swift index 3c1a384..3838a22 100644 --- a/VDSSample/ViewControllers/DropShawdowViewController.swift +++ b/VDSSample/ViewControllers/DropShawdowViewController.swift @@ -340,14 +340,13 @@ class DropShadowViewController: BaseViewController { } public class ShadowView: View { - public var shadow1 = View() - public var shadow2 = View() - + public var viewLightColor: UIColor.VDSColor = .paletteGray65 { didSet { setNeedsUpdate() }} public var viewDarkColor: UIColor.VDSColor = .backgroundPrimaryLight { didSet { setNeedsUpdate() }} public var viewRadiusRange: CGFloat = 8.0 { didSet { setNeedsUpdate() }} + private var shadowLayer1: CALayer = CALayer() public var showShadow: Bool = true { didSet { setNeedsUpdate() }} public var opacityRange: CGFloat = 1.0 { didSet { setNeedsUpdate() }} public var offsetXRange: CGFloat = 2.0 { didSet { setNeedsUpdate() }} @@ -356,6 +355,7 @@ public class ShadowView: View { public var shadowLightColor: UIColor.VDSColor = .backgroundPrimaryDark { didSet { setNeedsUpdate() }} public var shadowDarkColor: UIColor.VDSColor = .backgroundPrimaryLight { didSet { setNeedsUpdate() }} + private var shadowLayer2: CALayer = CALayer() public var showShadow2: Bool = false { didSet { setNeedsUpdate() }} public var opacityRange2: CGFloat = 1.0 { didSet { setNeedsUpdate() }} public var offsetXRange2: CGFloat = 2.0 { didSet { setNeedsUpdate() }} @@ -366,23 +366,22 @@ public class ShadowView: View { public override func setup() { super.setup() - addSubview(shadow1) - addSubview(shadow2) - shadow1.pinToSuperView() - shadow2.pinToSuperView() width(constant: 100) height(constant: 100) + + // Add shadow layers as sublayers of the view's layer + layer.insertSublayer(shadowLayer1, at: 0) + layer.insertSublayer(shadowLayer2, at: 0) } public override func updateView() { super.updateView() let viewColor = SurfaceColorConfiguration(viewLightColor.uiColor, viewDarkColor.uiColor).getColor(surface) backgroundColor = viewColor - shadow1.backgroundColor = .brown - shadow2.backgroundColor = .yellow - - shadow1.isHidden = !showShadow - shadow2.isHidden = !showShadow2 + shadowLayer1.backgroundColor = viewColor.cgColor + shadowLayer2.backgroundColor = viewColor.cgColor + shadowLayer1.isHidden = !showShadow + shadowLayer2.isHidden = !showShadow2 setNeedsLayout() layoutIfNeeded() } @@ -392,24 +391,24 @@ public class ShadowView: View { super.layoutSubviews() let dropshadowColor = SurfaceColorConfiguration(shadowLightColor.uiColor, shadowDarkColor.uiColor).getColor(surface) - let dropshadowColor2 = SurfaceColorConfiguration(shadowLightColor.uiColor, shadowDarkColor.uiColor).getColor(surface) + let dropshadowColor2 = SurfaceColorConfiguration(shadowLightColor2.uiColor, shadowDarkColor2.uiColor).getColor(surface) layer.cornerRadius = CGFloat(viewRadiusRange) layer.masksToBounds = false - shadow1.layer.cornerRadius = CGFloat(viewRadiusRange) - shadow1.layer.masksToBounds = false - shadow1.layer.cornerRadius = CGFloat(viewRadiusRange) - shadow1.layer.shadowColor = UIColor.purple.cgColor //dropshadowColor.cgColor - shadow1.layer.shadowOpacity = Float(opacityRange) - shadow1.layer.shadowOffset = .init(width: CGFloat(offsetXRange), height: CGFloat(offsetYRange)) - shadow1.layer.shadowRadius = CGFloat(radiusRange) + // Update shadow layers frames to match the view's bounds + shadowLayer1.frame = bounds + shadowLayer2.frame = bounds + + shadowLayer1.cornerRadius = CGFloat(viewRadiusRange) + shadowLayer1.shadowColor = dropshadowColor.cgColor + shadowLayer1.shadowOpacity = Float(opacityRange) + shadowLayer1.shadowOffset = .init(width: CGFloat(offsetXRange), height: CGFloat(offsetYRange)) + shadowLayer1.shadowRadius = CGFloat(radiusRange) - shadow2.layer.cornerRadius = CGFloat(viewRadiusRange) - shadow2.layer.masksToBounds = false - shadow2.layer.cornerRadius = CGFloat(viewRadiusRange) - shadow2.layer.shadowColor = UIColor.blue.cgColor//dropshadowColor2.cgColor - shadow2.layer.shadowOpacity = Float(opacityRange2) - shadow2.layer.shadowOffset = .init(width: CGFloat(offsetXRange2), height: CGFloat(offsetYRange2)) - shadow2.layer.shadowRadius = CGFloat(radiusRange2) + shadowLayer2.cornerRadius = CGFloat(viewRadiusRange) + shadowLayer2.shadowColor = dropshadowColor2.cgColor + shadowLayer2.shadowOpacity = Float(opacityRange2) + shadowLayer2.shadowOffset = .init(width: CGFloat(offsetXRange2), height: CGFloat(offsetYRange2)) + shadowLayer2.shadowRadius = CGFloat(radiusRange2) } }