swipe animation improvements

This commit is contained in:
Mauro Romito 2022-11-10 18:13:22 +01:00
parent c378a33b8f
commit 75d1e1a0ae
4 changed files with 21 additions and 10 deletions

View file

@ -118,8 +118,6 @@ extern NSTimeInterval const kResizeComposerAnimationDuration;
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray<NSLayoutConstraint*> *toolbarContainerConstraints; @property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray<NSLayoutConstraint*> *toolbarContainerConstraints;
@property (nonatomic, assign) CGFloat originalMaximisedWysiwygHeight;
@property (strong, nonatomic, nullable) UIView* maximisedToolbarDimmingView; @property (strong, nonatomic, nullable) UIView* maximisedToolbarDimmingView;

View file

@ -247,22 +247,23 @@ private extension RoomViewController {
guard let wysiwygInputToolbar = wysiwygInputToolbar else { return } guard let wysiwygInputToolbar = wysiwygInputToolbar else { return }
switch sender.state { switch sender.state {
case .began: case .began:
originalMaximisedWysiwygHeight = wysiwygInputToolbar.idealHeight break
case .changed: case .changed:
let translation = sender.translation(in: view) let translation = sender.translation(in: view)
guard wysiwygInputToolbar.idealHeight - translation.y < originalMaximisedWysiwygHeight else { return } let translatedValue = wysiwygInputToolbar.maxExpandedHeight - translation.y
wysiwygInputToolbar.idealHeight = originalMaximisedWysiwygHeight - translation.y guard translatedValue <= wysiwygInputToolbar.maxExpandedHeight, translatedValue >= wysiwygInputToolbar.compressedHeight else { return }
wysiwygInputToolbar.idealHeight = translatedValue
case .ended: case .ended:
if wysiwygInputToolbar.idealHeight < originalMaximisedWysiwygHeight * 0.5 { if wysiwygInputToolbar.idealHeight <= wysiwygInputToolbar.maxCompressedHeight {
wysiwygInputToolbar.minimise() wysiwygInputToolbar.minimise()
} else { } else {
wysiwygInputToolbar.idealHeight = self.originalMaximisedWysiwygHeight wysiwygInputToolbar.idealHeight = wysiwygInputToolbar.maxExpandedHeight
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseInOut]) { UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseInOut]) {
wysiwygInputToolbar.layoutIfNeeded() wysiwygInputToolbar.layoutIfNeeded()
} }
} }
case .cancelled: case .cancelled:
wysiwygInputToolbar.idealHeight = self.originalMaximisedWysiwygHeight wysiwygInputToolbar.idealHeight = wysiwygInputToolbar.maxExpandedHeight
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseInOut]) { UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseInOut]) {
wysiwygInputToolbar.layoutIfNeeded() wysiwygInputToolbar.layoutIfNeeded()
} }

View file

@ -41,7 +41,7 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
private var cancellables = Set<AnyCancellable>() private var cancellables = Set<AnyCancellable>()
private var heightConstraint: NSLayoutConstraint! private var heightConstraint: NSLayoutConstraint!
private var hostingViewController: VectorHostingController! private var hostingViewController: VectorHostingController!
private var wysiwygViewModel = WysiwygComposerViewModel(textColor: ThemeService.shared().theme.colors.primaryContent) private var wysiwygViewModel = WysiwygComposerViewModel(minHeight: 22, textColor: ThemeService.shared().theme.colors.primaryContent)
private var viewModel: ComposerViewModelProtocol = ComposerViewModel( private var viewModel: ComposerViewModelProtocol = ComposerViewModel(
initialViewState: ComposerViewState(textFormattingEnabled: RiotSettings.shared.enableWysiwygTextFormatting, initialViewState: ComposerViewState(textFormattingEnabled: RiotSettings.shared.enableWysiwygTextFormatting,
bindings: ComposerBindings(focused: false))) bindings: ComposerBindings(focused: false)))
@ -74,6 +74,18 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
} }
} }
var compressedHeight: CGFloat {
wysiwygViewModel.compressedHeight
}
var maxExpandedHeight: CGFloat {
wysiwygViewModel.maxExpandedHeight
}
var maxCompressedHeight: CGFloat {
wysiwygViewModel.maxCompressedHeight
}
// MARK: - Setup // MARK: - Setup
override class func instantiate() -> MXKRoomInputToolbarView! { override class func instantiate() -> MXKRoomInputToolbarView! {

View file

@ -29,7 +29,7 @@ struct Composer: View {
private let horizontalPadding: CGFloat = 12 private let horizontalPadding: CGFloat = 12
private let borderHeight: CGFloat = 40 private let borderHeight: CGFloat = 40
private let minTextViewHeight: CGFloat = 20 private let minTextViewHeight: CGFloat = 22
private var verticalPadding: CGFloat { private var verticalPadding: CGFloat {
(borderHeight - minTextViewHeight) / 2 (borderHeight - minTextViewHeight) / 2
} }