// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import UIKit import YYImage import SessionUIKit /// Shown when the user taps a profile picture in the conversation settings. final class ProfilePictureVC: BaseVC { private let image: UIImage? private let animatedImage: YYImage? private let snTitle: String private var imageSize: CGFloat { (UIScreen.main.bounds.width - (2 * Values.largeSpacing)) } // MARK: - UI private lazy var fallbackView: UIView = { let result: UIView = UIView() result.clipsToBounds = true result.themeBackgroundColor = .backgroundSecondary result.layer.cornerRadius = (imageSize / 2) result.isHidden = ( image != nil || animatedImage != nil ) result.set(.width, to: imageSize) result.set(.height, to: imageSize) return result }() private lazy var imageView: UIImageView = { let result: UIImageView = UIImageView(image: image) result.clipsToBounds = true result.contentMode = .scaleAspectFill result.layer.cornerRadius = (imageSize / 2) result.isHidden = (image == nil) result.set(.width, to: imageSize) result.set(.height, to: imageSize) return result }() private lazy var animatedImageView: YYAnimatedImageView = { let result: YYAnimatedImageView = YYAnimatedImageView(image: animatedImage) result.clipsToBounds = true result.contentMode = .scaleAspectFill result.layer.cornerRadius = (imageSize / 2) result.isHidden = (animatedImage == nil) result.set(.width, to: imageSize) result.set(.height, to: imageSize) return result }() // MARK: - Initialization init(image: UIImage?, animatedImage: YYImage?, title: String) { self.image = image self.animatedImage = animatedImage self.snTitle = title super.init(nibName: nil, bundle: nil) } override init(nibName: String?, bundle: Bundle?) { preconditionFailure("Use init(image:) instead.") } required init?(coder: NSCoder) { preconditionFailure("Use init(coder:) instead.") } override func viewDidLoad() { view.themeBackgroundColor = .backgroundPrimary setNavBarTitle(snTitle) // Close button let closeButton = UIBarButtonItem( image: #imageLiteral(resourceName: "X").withRenderingMode(.alwaysTemplate), style: .plain, target: self, action: #selector(close) ) closeButton.themeTintColor = .textPrimary navigationItem.leftBarButtonItem = closeButton view.addSubview(fallbackView) view.addSubview(imageView) view.addSubview(animatedImageView) fallbackView.center(in: view) imageView.center(in: view) animatedImageView.center(in: view) // Gesture recognizer let swipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(close)) swipeGestureRecognizer.direction = .down view.addGestureRecognizer(swipeGestureRecognizer) } @objc private func close() { presentingViewController?.dismiss(animated: true, completion: nil) } }