81 lines
2.8 KiB
Swift
81 lines
2.8 KiB
Swift
//
|
|
// PopUpViewController.swift
|
|
// TUIRoomKit
|
|
//
|
|
// Created by janejntang on 2023/1/12.
|
|
// Copyright © 2023 Tencent. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
|
|
protocol PopUpViewModelFactory {
|
|
func makeRootViewModel(viewType: PopUpViewType, height:CGFloat, backgroundColor: UIColor) -> PopUpViewModel
|
|
}
|
|
|
|
class PopUpViewController: UIViewController {
|
|
let viewModel: PopUpViewModel
|
|
var duration = 0.5
|
|
var alertTransitionStyle: AlertTransitionAnimator.AlertTransitionStyle = .present
|
|
var alertTransitionPosition: AlertTransitionAnimator.AlertTransitionPosition = .bottom
|
|
var transitionAnimator: AlertTransitionAnimator?
|
|
override var shouldAutorotate: Bool {
|
|
return true
|
|
}
|
|
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
|
|
return .allButUpsideDown
|
|
}
|
|
init(popUpViewModelFactory: PopUpViewModelFactory, viewType: PopUpViewType, height: CGFloat, backgroundColor: UIColor) {
|
|
viewModel = popUpViewModelFactory.makeRootViewModel(viewType: viewType, height: height, backgroundColor: backgroundColor)
|
|
super.init(nibName: nil, bundle: nil)
|
|
modalPresentationStyle = .custom
|
|
transitioningDelegate = self
|
|
if isLandscape {
|
|
self.alertTransitionPosition = .right
|
|
} else {
|
|
self.alertTransitionPosition = .bottom
|
|
}
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override func loadView() {
|
|
let rootView = PopUpView(viewModel: viewModel)
|
|
rootView.responder = self
|
|
view = rootView
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
navigationController?.setNavigationBarHidden(true, animated: false)
|
|
UIApplication.shared.isIdleTimerDisabled = true
|
|
}
|
|
|
|
deinit {
|
|
debugPrint("deinit \(self)")
|
|
}
|
|
}
|
|
|
|
extension PopUpViewController: UIViewControllerTransitioningDelegate {
|
|
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) ->
|
|
UIViewControllerAnimatedTransitioning? {
|
|
transitionAnimator = AlertTransitionAnimator()
|
|
transitionAnimator?.alertTransitionStyle = .present
|
|
transitionAnimator?.alertTransitionPosition = alertTransitionPosition
|
|
transitionAnimator?.duration = duration
|
|
return transitionAnimator
|
|
}
|
|
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
|
|
transitionAnimator?.alertTransitionStyle = .dismiss
|
|
return transitionAnimator
|
|
}
|
|
}
|
|
|
|
extension PopUpViewController: PopUpViewResponder {
|
|
func updateAlertTransitionPosition(position: AlertTransitionAnimator.AlertTransitionPosition) {
|
|
transitionAnimator?.alertTransitionPosition = position
|
|
}
|
|
}
|