Tusker/Tusker/Screens/Attachment/AttachmentViewController.swift

75 lines
2.2 KiB
Swift

// AttachmentViewController.swift
// Tusker
//
// Created by Shadowfacts on 6/14/19.
// Copyright © 2019 Shadowfacts. All rights reserved.
//
import UIKit
import Pachyderm
class AttachmentViewController: UIViewController {
let attachment: Attachment
var largeImageVC: LargeImageViewController?
var loadingVC: LoadingViewController?
private var initialControlsVisible: Bool = true
var controlsVisible: Bool {
get {
return largeImageVC?.controlsVisible ?? initialControlsVisible
}
set {
if let largeImageVC = largeImageVC {
largeImageVC.setControlsVisible(newValue, animated: false)
} else {
initialControlsVisible = newValue
}
}
}
override var childForHomeIndicatorAutoHidden: UIViewController? {
return largeImageVC
}
init(attachment: Attachment) {
self.attachment = attachment
super.init(nibName: "AttachmentViewController", bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
if let data = ImageCache.attachments.get(attachment.url) {
createLargeImage(data: data)
} else {
loadingVC = LoadingViewController()
embedChild(loadingVC!)
ImageCache.attachments.get(attachment.url) { [weak self] (data) in
DispatchQueue.main.async {
self?.loadingVC?.removeViewAndController()
self?.createLargeImage(data: data!)
}
}
}
}
func createLargeImage(data: Data) {
guard let image = UIImage(data: data) else { return }
largeImageVC = LargeImageViewController(image: image, description: attachment.description, sourceFrame: nil, sourceCornerRadius: nil)
largeImageVC!.initialControlsVisible = initialControlsVisible
largeImageVC!.shrinkGestureEnabled = false
if attachment.url.pathExtension == "gif" {
largeImageVC!.gifData = data
}
embedChild(largeImageVC!)
}
}