diff --git a/Sources/Instructions/Managers/Internal/OverlayStyleManager/TranslucentOverlayStyleManager.swift b/Sources/Instructions/Managers/Internal/OverlayStyleManager/TranslucentOverlayStyleManager.swift index 22a74405..8b7803aa 100644 --- a/Sources/Instructions/Managers/Internal/OverlayStyleManager/TranslucentOverlayStyleManager.swift +++ b/Sources/Instructions/Managers/Internal/OverlayStyleManager/TranslucentOverlayStyleManager.swift @@ -68,6 +68,7 @@ class TranslucentOverlayStyleManager: OverlayStyleManager { if show { self.overlayLayer.removeFromSuperlayer() self.overlayLayer.frame = overlay.bounds + self.fixColorFromPatternImageIfNeeded(for: self.overlayLayer) self.overlayLayer.backgroundColor = self.color.cgColor overlay.holder.layer.addSublayer(self.overlayLayer) overlay.holder.backgroundColor = UIColor.clear @@ -122,6 +123,7 @@ class TranslucentOverlayStyleManager: OverlayStyleManager { let maskLayer = CALayer() maskLayer.frame = overlayLayer.bounds + fixColorFromPatternImageIfNeeded(for: self.cutoutMaskLayer) maskLayer.addSublayer(self.cutoutMaskLayer) maskLayer.addSublayer(self.fullMaskLayer) @@ -160,4 +162,16 @@ class TranslucentOverlayStyleManager: OverlayStyleManager { return layer } + + /* + // Adjust for flipped origins between CG and iOS. + // iOS origin: top left. CG origin: bottom left. + // This fix ensures proper rendering of gradient images and cutout layers + // created with `init(patternImage image: UIImage)`. + */ + private func fixColorFromPatternImageIfNeeded(for layer: CALayer) { + if type(of: self.color) == NSClassFromString("UIDynamicPatternColor") { + layer.transform = CATransform3DMakeScale(1, -1, 1) + } + } }