// // BaseScrollView.swift // PrivadoVPN // // Created by Lizaveta Malinouskaya on 15.07.21. // Copyright © 2021 Privado LLC. All rights reserved. // import Foundation import UIKit class BaseScrollView: UIScrollView, ReactivelyConstrained { // MARK: - Properties var portraitConstraints = [NSLayoutConstraint]() var landscapeConstraints = [NSLayoutConstraint]() var sharedConstraints = [NSLayoutConstraint]() let layoutEmitter = Emitter() // MARK: - Init init() { super.init(frame: .zero) self.layoutEmitter.addReaction { [weak self] isLandscape -> ShouldContinueReceiveNotifications in guard let self = self else { return false } if isLandscape { NSLayoutConstraint.deactivate(self.portraitConstraints) NSLayoutConstraint.activate(self.landscapeConstraints) } else { NSLayoutConstraint.deactivate(self.landscapeConstraints) NSLayoutConstraint.activate(self.portraitConstraints) } NSLayoutConstraint.activate(self.sharedConstraints) return true } self.addKeyboardObserverIfNeeded() } @available(*, unavailable) required init?(coder: NSCoder) { nil } // MARK: - Private private func addKeyboardObserverIfNeeded() { guard self is KeyboardListening else { return } NotificationCenter.default.addObserver( self, selector: #selector(self.keyboardWillShowObserved), name: UIResponder.keyboardWillShowNotification, object: nil ) NotificationCenter.default.addObserver( self, selector: #selector(self.keyboardWillHideObserved), name: UIResponder.keyboardWillHideNotification, object: nil ) } @objc private func keyboardWillShowObserved(_ notification: Notification) { (self as? KeyboardListening)?.keyboardWillShow(notification) } @objc private func keyboardWillHideObserved(_ notification: Notification) { (self as? KeyboardListening)?.keyboardWillHide(notification) } }