mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
swipe animation improvements
This commit is contained in:
parent
c378a33b8f
commit
75d1e1a0ae
4 changed files with 21 additions and 10 deletions
|
@ -118,8 +118,6 @@ extern NSTimeInterval const kResizeComposerAnimationDuration;
|
|||
|
||||
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray<NSLayoutConstraint*> *toolbarContainerConstraints;
|
||||
|
||||
@property (nonatomic, assign) CGFloat originalMaximisedWysiwygHeight;
|
||||
|
||||
@property (strong, nonatomic, nullable) UIView* maximisedToolbarDimmingView;
|
||||
|
||||
|
||||
|
|
|
@ -247,22 +247,23 @@ private extension RoomViewController {
|
|||
guard let wysiwygInputToolbar = wysiwygInputToolbar else { return }
|
||||
switch sender.state {
|
||||
case .began:
|
||||
originalMaximisedWysiwygHeight = wysiwygInputToolbar.idealHeight
|
||||
break
|
||||
case .changed:
|
||||
let translation = sender.translation(in: view)
|
||||
guard wysiwygInputToolbar.idealHeight - translation.y < originalMaximisedWysiwygHeight else { return }
|
||||
wysiwygInputToolbar.idealHeight = originalMaximisedWysiwygHeight - translation.y
|
||||
let translatedValue = wysiwygInputToolbar.maxExpandedHeight - translation.y
|
||||
guard translatedValue <= wysiwygInputToolbar.maxExpandedHeight, translatedValue >= wysiwygInputToolbar.compressedHeight else { return }
|
||||
wysiwygInputToolbar.idealHeight = translatedValue
|
||||
case .ended:
|
||||
if wysiwygInputToolbar.idealHeight < originalMaximisedWysiwygHeight * 0.5 {
|
||||
if wysiwygInputToolbar.idealHeight <= wysiwygInputToolbar.maxCompressedHeight {
|
||||
wysiwygInputToolbar.minimise()
|
||||
} else {
|
||||
wysiwygInputToolbar.idealHeight = self.originalMaximisedWysiwygHeight
|
||||
wysiwygInputToolbar.idealHeight = wysiwygInputToolbar.maxExpandedHeight
|
||||
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseInOut]) {
|
||||
wysiwygInputToolbar.layoutIfNeeded()
|
||||
}
|
||||
}
|
||||
case .cancelled:
|
||||
wysiwygInputToolbar.idealHeight = self.originalMaximisedWysiwygHeight
|
||||
wysiwygInputToolbar.idealHeight = wysiwygInputToolbar.maxExpandedHeight
|
||||
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseInOut]) {
|
||||
wysiwygInputToolbar.layoutIfNeeded()
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
|
|||
private var cancellables = Set<AnyCancellable>()
|
||||
private var heightConstraint: NSLayoutConstraint!
|
||||
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(
|
||||
initialViewState: ComposerViewState(textFormattingEnabled: RiotSettings.shared.enableWysiwygTextFormatting,
|
||||
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
|
||||
|
||||
override class func instantiate() -> MXKRoomInputToolbarView! {
|
||||
|
|
|
@ -29,7 +29,7 @@ struct Composer: View {
|
|||
|
||||
private let horizontalPadding: CGFloat = 12
|
||||
private let borderHeight: CGFloat = 40
|
||||
private let minTextViewHeight: CGFloat = 20
|
||||
private let minTextViewHeight: CGFloat = 22
|
||||
private var verticalPadding: CGFloat {
|
||||
(borderHeight - minTextViewHeight) / 2
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue