// // ComposeAttachmentView.swift // Tusker // // Created by Shadowfacts on 1/10/19. // Copyright © 2019 Shadowfacts. All rights reserved. // import UIKit import Photos import AVFoundation protocol ComposeMediaViewDelegate { func didRemoveMedia(_ mediaView: ComposeMediaView) } class ComposeMediaView: UIView { var delegate: ComposeMediaViewDelegate? @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var descriptionTextView: UITextView! @IBOutlet weak var placeholderLabel: UILabel! var attachment: CompositionAttachment! static func create() -> ComposeMediaView { return UINib(nibName: "ComposeMediaView", bundle: nil).instantiate(withOwner: nil, options: nil).first as! ComposeMediaView } override func awakeFromNib() { super.awakeFromNib() imageView.layer.masksToBounds = true imageView.layer.cornerRadius = 10 // 0.1 * imageView.frame.width descriptionTextView.delegate = self } func update(attachment: CompositionAttachment) { self.attachment = attachment switch attachment { case let .image(image): imageView.image = image case let .asset(asset): let size = CGSize(width: 80, height: 80) PHImageManager.default().requestImage(for: asset, targetSize: size, contentMode: .aspectFill, options: nil) { (image, _) in guard self.attachment == attachment else { return } self.imageView.image = image } case let .video(url): let asset = AVURLAsset(url: url) let imageGenerator = AVAssetImageGenerator(asset: asset) if let cgImage = try? imageGenerator.copyCGImage(at: .zero, actualTime: nil) { imageView.image = UIImage(cgImage: cgImage) } } } // MARK: - Interaction @IBAction func removePressed(_ sender: Any) { delegate?.didRemoveMedia(self) } } extension ComposeMediaView: UITextViewDelegate { func textViewDidChange(_ textView: UITextView) { placeholderLabel.isHidden = !descriptionTextView.text.isEmpty } }