Files
2021-09-02 09:37:25 +00:00

78 lines
2.3 KiB
Swift

//
// 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<EmitterLayoutChangeType>()
// 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)
}
}