提交
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user