Skip to content

Instantly share code, notes, and snippets.

@Kamajabu
Created April 11, 2020 14:17
Show Gist options
  • Save Kamajabu/07153bb5c8977d73673aa6a7b4563d84 to your computer and use it in GitHub Desktop.
Save Kamajabu/07153bb5c8977d73673aa6a7b4563d84 to your computer and use it in GitHub Desktop.
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