76 lines
2.3 KiB
Swift
76 lines
2.3 KiB
Swift
//
|
|
// 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)
|
|
func descriptionTextViewDidChange(_ 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
|
|
delegate?.descriptionTextViewDidChange(self)
|
|
}
|
|
}
|