From f84c578420b34c037e65e86a5906be0332eaec1d Mon Sep 17 00:00:00 2001 From: Evan Hahn Date: Tue, 5 Apr 2022 12:59:32 -0500 Subject: [PATCH] `UIView`'s `renderAsImage` always returns an image We extend `UIView` with a new method, `renderAsImage`. It always returns a `UIImage`, but we marked its return type as `UIImage?`. This removes that optionality and updates all callers. --- .../PreviewWallpaperViewController.swift | 6 ++---- SignalUI/Categories/UIView+SignalUI.swift | 4 ++-- .../ImageEditor/ImageEditorPaletteView.swift | 19 ++++++++----------- SignalUI/Wallpapers/Wallpaper.swift | 7 ++----- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/Signal/src/ViewControllers/Wallpapers/PreviewWallpaperViewController.swift b/Signal/src/ViewControllers/Wallpapers/PreviewWallpaperViewController.swift index 69bf9b6104..a884784765 100644 --- a/Signal/src/ViewControllers/Wallpapers/PreviewWallpaperViewController.swift +++ b/Signal/src/ViewControllers/Wallpapers/PreviewWallpaperViewController.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2021 Open Whisper Systems. All rights reserved. +// Copyright (c) 2022 Open Whisper Systems. All rights reserved. // import Foundation @@ -122,9 +122,7 @@ class PreviewWallpaperViewController: UIViewController { guard let standalonePage = self.standalonePage else { return owsFailDebug("Missing standalone page for photo") } - guard let croppedAndScaledPhoto = standalonePage.view.renderAsImage() else { - return owsFailDebug("Failed to snapshot cropped and scaled photo") - } + let croppedAndScaledPhoto = standalonePage.view.renderAsImage() try Wallpaper.setPhoto(croppedAndScaledPhoto, for: self.thread, transaction: transaction) case .preset(let selectedWallpaper): try Wallpaper.setBuiltIn(selectedWallpaper, for: self.thread, transaction: transaction) diff --git a/SignalUI/Categories/UIView+SignalUI.swift b/SignalUI/Categories/UIView+SignalUI.swift index bc7b8bb0af..e34eac398e 100644 --- a/SignalUI/Categories/UIView+SignalUI.swift +++ b/SignalUI/Categories/UIView+SignalUI.swift @@ -65,11 +65,11 @@ public class SpacerView: UIView { @objc public extension UIView { - func renderAsImage() -> UIImage? { + func renderAsImage() -> UIImage { renderAsImage(opaque: false, scale: UIScreen.main.scale) } - func renderAsImage(opaque: Bool, scale: CGFloat) -> UIImage? { + func renderAsImage(opaque: Bool, scale: CGFloat) -> UIImage { let format = UIGraphicsImageRendererFormat() format.scale = scale format.opaque = opaque diff --git a/SignalUI/Views/ImageEditor/ImageEditorPaletteView.swift b/SignalUI/Views/ImageEditor/ImageEditorPaletteView.swift index c0f63c90dd..4c8bf9bbdb 100644 --- a/SignalUI/Views/ImageEditor/ImageEditorPaletteView.swift +++ b/SignalUI/Views/ImageEditor/ImageEditorPaletteView.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2021 Open Whisper Systems. All rights reserved. +// Copyright (c) 2022 Open Whisper Systems. All rights reserved. // import UIKit @@ -214,15 +214,12 @@ public class ImageEditorPaletteView: UIView { shadowView.layer.shadowOffset = .zero addSubview(shadowView) - if let image = ImageEditorPaletteView.buildPaletteGradientImage() { - imageView.image = image - let imageRadius = image.size.width * 0.5 - imageView.layer.cornerRadius = imageRadius - shadowView.layer.cornerRadius = imageRadius - imageView.clipsToBounds = true - } else { - owsFailDebug("Missing image.") - } + let image = ImageEditorPaletteView.buildPaletteGradientImage() + imageView.image = image + let imageRadius = image.size.width * 0.5 + imageView.layer.cornerRadius = imageRadius + shadowView.layer.cornerRadius = imageRadius + imageView.clipsToBounds = true addSubview(imageView) // We use an invisible margin to expand the hot area of this control. let margin: CGFloat = 20 @@ -362,7 +359,7 @@ public class ImageEditorPaletteView: UIView { selectColor(atLocationY: location.y) } - private static func buildPaletteGradientImage() -> UIImage? { + private static func buildPaletteGradientImage() -> UIImage { let gradientSize = CGSize(width: 8, height: 200) let gradientBounds = CGRect(origin: .zero, size: gradientSize) let gradientView = UIView() diff --git a/SignalUI/Wallpapers/Wallpaper.swift b/SignalUI/Wallpapers/Wallpaper.swift index 530687f413..38d8c77c3a 100644 --- a/SignalUI/Wallpapers/Wallpaper.swift +++ b/SignalUI/Wallpapers/Wallpaper.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2021 Open Whisper Systems. All rights reserved. +// Copyright (c) 2022 Open Whisper Systems. All rights reserved. // import Foundation @@ -527,10 +527,7 @@ public class WallpaperBlurProviderImpl: NSObject, WallpaperBlurProvider { guard bounds.width > 0, bounds.height > 0 else { return nil } - guard let contentImage = contentView.renderAsImage() else { - owsFailDebug("Could not render contentView.") - return nil - } + let contentImage = contentView.renderAsImage() // We approximate the behavior of UIVisualEffectView(effect: UIBlurEffect(style: .regular)). let tintColor: UIColor = (isDarkThemeEnabled ? UIColor.ows_black.withAlphaComponent(0.9)