Skip to content

Instantly share code, notes, and snippets.

@HaruhikoMotokawa
Created September 26, 2023 09:20
Show Gist options
  • Save HaruhikoMotokawa/aaa0390636c33ec78ce224b5e9fa5744 to your computer and use it in GitHub Desktop.
Save HaruhikoMotokawa/aaa0390636c33ec78ce224b5e9fa5744 to your computer and use it in GitHub Desktop.
import UIKit
final class TutorialMenuViewController: UIViewController {
let testArray: [String] = ["1", "2", "3", "4", "5"]
private var isActiveConstraint: Bool = false
private var baseViewTrailingConstraint: NSLayoutConstraint!
private lazy var touchView: UIView = {
let view = UIView()
view.backgroundColor = .blue
view.translatesAutoresizingMaskIntoConstraints = false
let touch = UITapGestureRecognizer(
target: self, action: #selector(toggleConstraints))
view.addGestureRecognizer(touch)
return view
}()
private var baseView: UIView = {
let view = UIView()
view.backgroundColor = .darkGray
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
private lazy var menuTableView: UITableView = {
let tableview = UITableView()
tableview.translatesAutoresizingMaskIntoConstraints = false
tableview.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
tableview.dataSource = self
return tableview
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.red
makeTouchView()
makeBaseView()
makeMenuTableView()
}
func showModal(isAnimation: Bool = true) {
isActiveConstraint.toggle()
if isActiveConstraint {
baseViewTrailingConstraint.constant = -(view.bounds.width / 3) * 1
} else {
baseViewTrailingConstraint.constant = -view.bounds.width
}
if isAnimation {
UIView.animate(withDuration: 0.2) {
self.view.layoutIfNeeded()
}
} else {
view.layoutIfNeeded()
}
}
}
private extension TutorialMenuViewController {
func makeMenuTableView() {
baseView.addSubview(menuTableView)
NSLayoutConstraint.activate([
menuTableView.topAnchor.constraint(
equalTo: baseView.safeAreaLayoutGuide.topAnchor, constant: 10),
menuTableView.bottomAnchor.constraint(
equalTo: baseView.safeAreaLayoutGuide.bottomAnchor, constant: -10),
menuTableView.leadingAnchor.constraint(equalTo: baseView.leadingAnchor, constant: 20),
menuTableView.trailingAnchor.constraint(equalTo: baseView.trailingAnchor, constant: -20),
])
}
func makeBaseView() {
baseViewTrailingConstraint = baseView.trailingAnchor.constraint(
equalTo: view.trailingAnchor, constant: -view.bounds.width)
view.addSubview(baseView)
NSLayoutConstraint.activate([
baseView.topAnchor.constraint(equalTo: view.topAnchor),
baseView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
baseView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
baseViewTrailingConstraint,
])
}
func makeTouchView() {
view.addSubview(touchView)
NSLayoutConstraint.activate([
touchView.topAnchor.constraint(equalTo: view.topAnchor),
touchView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
touchView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
touchView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
}
}
private extension TutorialMenuViewController {
@objc func toggleConstraints() {
print("タップしたよ")
showModal()
}
}
extension TutorialMenuViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return testArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = testArray[indexPath.row]
return cell
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment