| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- //
- // 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
- }
- }
|