Created
April 11, 2020 14:17
-
-
Save Kamajabu/07153bb5c8977d73673aa6a7b4563d84 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import EasyPeasy | |
class ViewController: UIViewController { | |
private lazy var textView = UITextView(frame: CGRect.zero) | |
private lazy var button1 = createButton(.green) | |
private lazy var button2 = createButton(.red) | |
private lazy var button3 = createButton(.blue) | |
private lazy var expandButton = createButton(.black) | |
private lazy var actionButtons = [button1, button2, button3] | |
lazy var leftStackView: UIStackView = { | |
let stackView = UIStackView() | |
stackView.spacing = 2 | |
stackView.distribution = .fillEqually | |
stackView.addArrangedSubview(expandButton) | |
return stackView | |
}() | |
private let maxHeight: CGFloat = 100 | |
private var isExtended = false | |
private let stackViewExtendedWidth: CGFloat = 80 | |
private let stackViewCollapsedWidth: CGFloat = 30 | |
private let stackViewHeight: CGFloat = 25 | |
override func loadView() { | |
super.loadView() | |
self.view.backgroundColor = UIColor.white | |
self.textView.delegate = self | |
self.textView.layer.borderColor = UIColor.gray.withAlphaComponent(0.5).cgColor | |
self.textView.layer.borderWidth = 1.0 | |
self.textView.layer.cornerRadius = 5 | |
self.textView.clipsToBounds = true | |
self.textView.isScrollEnabled = false | |
self.view.addSubview(textView) | |
self.view.addSubview(leftStackView) | |
leftStackView.easy.layout( | |
Left(10), | |
Height(stackViewHeight), | |
Width(stackViewCollapsedWidth), | |
CenterY().to(textView) | |
) | |
textView.easy.layout( | |
Left(10).to(leftStackView).with(.medium), | |
Left(>=10).with(.required), | |
Right(10), | |
Top(200)) | |
expandButton.addTarget(self, action: #selector(expand), for: .touchUpInside) | |
} | |
@objc func expand() { | |
guard !isExtended else { | |
return | |
} | |
isExtended.toggle() | |
leftStackView.easy.layout(Left(-100)) | |
UIView.animate(withDuration: 1, animations: { | |
self.view.layoutIfNeeded() | |
}, completion: { [unowned self] _ in | |
self.leftStackView.arrangedSubviews.forEach { $0.removeFromSuperview() } | |
self.actionButtons.forEach { self.leftStackView.addArrangedSubview($0 )} | |
self.leftStackView.easy.layout(Width(self.stackViewExtendedWidth)) | |
self.view.layoutIfNeeded() | |
self.leftStackView.easy.layout(Left(10)) | |
UIView.animate(withDuration: 1) { | |
self.view.layoutIfNeeded() | |
} | |
}) | |
} | |
func collapse() { | |
guard isExtended else { | |
return | |
} | |
isExtended.toggle() | |
leftStackView.easy.layout(Left(-100)) | |
UIView.animate(withDuration: 1, animations: { | |
self.view.layoutIfNeeded() | |
}, completion: { [unowned self] _ in | |
self.leftStackView.arrangedSubviews.forEach { $0.removeFromSuperview() } | |
self.leftStackView.addArrangedSubview(self.expandButton) | |
self.leftStackView.easy.layout(Width(self.stackViewCollapsedWidth)) | |
self.view.layoutIfNeeded() | |
self.leftStackView.easy.layout(Left(10)) | |
UIView.animate(withDuration: 1) { | |
self.view.layoutIfNeeded() | |
} | |
}) | |
} | |
private func createButton(_ color: UIColor) -> UIButton { | |
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 24, height: 24)) | |
button.backgroundColor = color | |
return button | |
} | |
} | |
// MARK: - UITextViewDelegate | |
extension ViewController: UITextViewDelegate { | |
func textViewDidChange(_ textView: UITextView) { | |
collapse() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment