From d9760b6bbcaa216eae15ba9ead2a16deb60bb442 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 26 Mar 2019 16:17:23 -0400 Subject: [PATCH] Fix bug around layer ordering when rendering image editor output. --- .../Views/ImageEditor/ImageEditorCanvasView.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/SignalMessaging/Views/ImageEditor/ImageEditorCanvasView.swift b/SignalMessaging/Views/ImageEditor/ImageEditorCanvasView.swift index 92ec0ef7c..59dad9841 100644 --- a/SignalMessaging/Views/ImageEditor/ImageEditorCanvasView.swift +++ b/SignalMessaging/Views/ImageEditor/ImageEditorCanvasView.swift @@ -634,6 +634,7 @@ public class ImageEditorCanvasView: UIView { imageLayer.contentsScale = dstScale * transform.scaling contentView.layer.addSublayer(imageLayer) + var layers = [CALayer]() for item in model.items() { guard let layer = layerForItem(item: item, model: model, @@ -643,6 +644,15 @@ public class ImageEditorCanvasView: UIView { continue } layer.contentsScale = dstScale * transform.scaling * item.outputScale() + layers.append(layer) + } + // UIView.renderAsImage() doesn't honor zPosition of layers, + // so sort the item layers to ensure they are added in the + // correct order. + let sortedLayers = layers.sorted(by: { (left, right) -> Bool in + return left.zPosition < right.zPosition + }) + for layer in sortedLayers { contentView.layer.addSublayer(layer) }