jellyflood/Swiftfin tvOS/Components/HomeCinematicView/UICinematicBackgroundView.s...

72 lines
2.3 KiB
Swift

//
/*
* SwiftFin is subject to the terms of the Mozilla Public
* License, v2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* Copyright 2021 Aiden Vigue & Jellyfin Contributors
*/
import SwiftUI
import UIKit
class UICinematicBackgroundView: UIView {
private var currentImageView: UIView?
private var selectDelayTimer: Timer?
init(initialImageView: UIImageView) {
super.init(frame: .zero)
initialImageView.translatesAutoresizingMaskIntoConstraints = false
initialImageView.alpha = 0
addSubview(initialImageView)
NSLayoutConstraint.activate([
initialImageView.topAnchor.constraint(equalTo: topAnchor),
initialImageView.bottomAnchor.constraint(equalTo: bottomAnchor),
initialImageView.leftAnchor.constraint(equalTo: leftAnchor),
initialImageView.rightAnchor.constraint(equalTo: rightAnchor)
])
self.currentImageView = initialImageView
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func update(imageView: UIImageView) {
selectDelayTimer?.invalidate()
selectDelayTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(delayTimerTimed), userInfo: imageView, repeats: false)
}
@objc private func delayTimerTimed(timer: Timer) {
let newImageView = timer.userInfo as! UIImageView
newImageView.translatesAutoresizingMaskIntoConstraints = false
newImageView.alpha = 0
addSubview(newImageView)
NSLayoutConstraint.activate([
newImageView.topAnchor.constraint(equalTo: topAnchor),
newImageView.bottomAnchor.constraint(equalTo: bottomAnchor),
newImageView.leftAnchor.constraint(equalTo: leftAnchor),
newImageView.rightAnchor.constraint(equalTo: rightAnchor)
])
UIView.animate(withDuration: 0.2) {
newImageView.alpha = 1
self.currentImageView?.alpha = 0
} completion: { _ in
self.currentImageView?.removeFromSuperview()
self.currentImageView = newImageView
}
}
}