76 lines
2.1 KiB
Swift
76 lines
2.1 KiB
Swift
//
|
||
// CloudDrivePreviewViewController.swift
|
||
// suixinkan
|
||
//
|
||
|
||
import AVKit
|
||
import Kingfisher
|
||
import SnapKit
|
||
import UIKit
|
||
|
||
/// 云盘文件预览页,黑底展示图片或视频。
|
||
final class CloudDrivePreviewViewController: BaseViewController {
|
||
private let file: CloudFile
|
||
private let imageView = UIImageView()
|
||
private var playerViewController: AVPlayerViewController?
|
||
|
||
/// 初始化预览页。
|
||
init(file: CloudFile) {
|
||
self.file = file
|
||
super.init(nibName: nil, bundle: nil)
|
||
}
|
||
|
||
@available(*, unavailable)
|
||
required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
override func setupNavigationBar() {
|
||
title = ""
|
||
navigationController?.navigationBar.tintColor = .white
|
||
}
|
||
|
||
override func setupUI() {
|
||
view.backgroundColor = .black
|
||
if file.isVideo {
|
||
setupVideo()
|
||
} else {
|
||
setupImage()
|
||
}
|
||
}
|
||
|
||
override func viewWillDisappear(_ animated: Bool) {
|
||
super.viewWillDisappear(animated)
|
||
navigationController?.navigationBar.tintColor = AppColor.primary
|
||
playerViewController?.player?.pause()
|
||
}
|
||
|
||
private func setupImage() {
|
||
imageView.contentMode = .scaleAspectFit
|
||
imageView.backgroundColor = .black
|
||
view.addSubview(imageView)
|
||
imageView.snp.makeConstraints { make in
|
||
make.edges.equalTo(view.safeAreaLayoutGuide)
|
||
}
|
||
if let url = URL(string: file.fileUrl) {
|
||
imageView.kf.setImage(with: url)
|
||
}
|
||
}
|
||
|
||
private func setupVideo() {
|
||
guard let url = URL(string: file.fileUrl) else { return }
|
||
let player = AVPlayer(url: url)
|
||
let controller = AVPlayerViewController()
|
||
controller.player = player
|
||
controller.view.backgroundColor = .black
|
||
addChild(controller)
|
||
view.addSubview(controller.view)
|
||
controller.view.snp.makeConstraints { make in
|
||
make.edges.equalTo(view.safeAreaLayoutGuide)
|
||
}
|
||
controller.didMove(toParent: self)
|
||
playerViewController = controller
|
||
player.play()
|
||
}
|
||
}
|