Don't obscure attachment when keyboard is popped.

// FREEBIE
pull/1/head
sdkjfhsdkjhfsdlkjhfsdf 7 years ago
parent 38d94952f7
commit 653a272b54

@ -123,7 +123,7 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
containerView.addSubview(mediaMessageView)
mediaMessageView.autoPinEdgesToSuperviewEdges()
if attachment.isImage || attachment.isVideo {
if isZoomable {
// Add top and bottom gradients to ensure toolbar controls are legible
// when placed over image/video preview which may be a clashing color.
let topGradient = GradientView(from: backgroundColor, to: UIColor.clear)
@ -211,6 +211,14 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
// MARK: CaptioningToolbarDelegate
func captioningToolbarDidBeginEditing(_ captioningToolbar: CaptioningToolbar) {
self.shouldShrinkAttachment = true
}
func captioningToolbarDidEndEditing(_ captioningToolbar: CaptioningToolbar) {
self.shouldShrinkAttachment = false
}
func captioningToolbarDidTapSend(_ captioningToolbar: CaptioningToolbar, captionText: String?) {
self.sendAttachment(captionText: captionText)
}
@ -221,6 +229,10 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
// MARK: Helpers
var isZoomable: Bool {
return attachment.isImage || attachment.isVideo
}
private func sendAttachment(captionText: String?) {
// disable controls after send was tapped.
self.bottomToolbar.isUserInteractionEnabled = false
@ -236,12 +248,36 @@ public class AttachmentApprovalViewController: OWSViewController, CaptioningTool
attachment.captionText = captionText
self.delegate?.didApproveAttachment(attachment: attachment)
}
// When the keyboard is popped, it can obscure the attachment view.
private var shouldShrinkAttachment: Bool = false {
didSet {
UIView.animate(withDuration: 0.2) {
if self.shouldShrinkAttachment {
let kScaleFactor: CGFloat = 0.7
let scale = CGAffineTransform(scaleX: kScaleFactor, y: kScaleFactor)
let originalHeight = self.scrollView.bounds.size.height
// Position the new scaled item to be centered with respect
// to it's new size.
let heightDelta = originalHeight * (1 - kScaleFactor)
let translate = CGAffineTransform(translationX: 0, y: -heightDelta / 2)
self.scrollView.transform = scale.concatenating(translate)
} else {
self.scrollView.transform = CGAffineTransform.identity
}
}
}
}
}
extension AttachmentApprovalViewController: UIScrollViewDelegate {
public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
if attachment.isImage || attachment.isVideo {
if isZoomable {
return mediaMessageView
} else {
// don't zoom for audio or generic attachments.
@ -330,6 +366,8 @@ private class GradientView: UIView {
protocol CaptioningToolbarDelegate: class {
func captioningToolbarDidTapSend(_ captioningToolbar: CaptioningToolbar, captionText: String?)
func captioningToolbar(_ captioningToolbar: CaptioningToolbar, didChangeTextViewHeight newHeight: CGFloat)
func captioningToolbarDidBeginEditing(_ captioningToolbar: CaptioningToolbar)
func captioningToolbarDidEndEditing(_ captioningToolbar: CaptioningToolbar)
}
class CaptioningToolbar: UIView, UITextViewDelegate {
@ -480,6 +518,14 @@ class CaptioningToolbar: UIView, UITextViewDelegate {
}
}
public func textViewDidBeginEditing(_ textView: UITextView) {
self.captioningToolbarDelegate?.captioningToolbarDidBeginEditing(self)
}
public func textViewDidEndEditing(_ textView: UITextView) {
self.captioningToolbarDelegate?.captioningToolbarDidEndEditing(self)
}
// MARK: - Helpers
private func clampedTextViewHeight(fixedWidth: CGFloat) -> CGFloat {

Loading…
Cancel
Save