session-ios/Session/Conversations/Settings/ProfilePictureVC.swift
Morgan Pretty face9da02b Fixed search performance, started styling in-conversaiton settings
Fixed a bug where the scroll to bottom button wasn't working
Fixed an issue where searching was running on the main thread (which could cause UI issues)
Updated the searching to interrupt the previous query when the search term changes
Updated the in-conversation settings to be use the new config-based approach (deleted the OWSConversationSettingsViewController)
2022-09-07 17:37:01 +10:00

106 lines
3.3 KiB
Swift

// 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)
}
}