add dropdowns for page turning mode and background color

This commit is contained in:
2025-07-07 23:55:16 +02:00
parent 6d541f9798
commit e91b53f569

View File

@@ -17,17 +17,25 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
var images: [UIImage] = []
var page = 0
var mode = PageTurnMode.leftToRight
var leftTap: UITapGestureRecognizer!
var rightTap: UITapGestureRecognizer!
var topTap: UITapGestureRecognizer!
let topBarView = UIView()
var isTopBarVisible = false
let topBarLabel = UILabel()
var topBarHeightConstraint: NSLayoutConstraint!
let pageTurnDropdownView = UIView()
let pageTurnDropdownButton = UIButton()
let backgroundColorDropdownView = UIView()
let backgroundColorDropdownButton = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
view.backgroundColor = .white
setup()
}
@@ -100,6 +108,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
func setupTopBar() {
topBarView.translatesAutoresizingMaskIntoConstraints = false
topBarView.backgroundColor = UIColor.black.withAlphaComponent(0.8) // Or any style
topBarView.isHidden = true
view.addSubview(topBarView)
topBarHeightConstraint = topBarView.heightAnchor.constraint(equalToConstant: 0)
@@ -110,6 +119,161 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
topBarView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
topBarHeightConstraint,
])
topBarLabel.text = "Menu"
topBarLabel.textColor = .white
topBarLabel.translatesAutoresizingMaskIntoConstraints = false
topBarLabel.isHidden = true
topBarView.addSubview(topBarLabel)
NSLayoutConstraint.activate([
topBarLabel.centerXAnchor.constraint(equalTo: topBarView.centerXAnchor),
topBarLabel.centerYAnchor.constraint(equalTo: topBarView.centerYAnchor),
])
setupBackgroundColorDropdown()
setupPageTurnDropdown()
}
func setupBackgroundColorDropdown() {
// TODO: Find out how to acutally do UI and dropdowns with StackView
backgroundColorDropdownButton.setTitle("Background color ▼", for: .normal)
backgroundColorDropdownButton.setTitleColor(.white, for: .normal)
backgroundColorDropdownButton.isHidden = true
backgroundColorDropdownButton.translatesAutoresizingMaskIntoConstraints = false
topBarView.addSubview(backgroundColorDropdownButton)
NSLayoutConstraint.activate([
backgroundColorDropdownButton.trailingAnchor.constraint(
equalTo: topBarView.leadingAnchor, constant: 180),
backgroundColorDropdownButton.centerYAnchor.constraint(
equalTo: topBarView.centerYAnchor),
])
backgroundColorDropdownButton.addTarget(
self, action: #selector(toggleBackgroundColorDropdown), for: .touchUpInside)
backgroundColorDropdownView.backgroundColor = UIColor.darkGray
backgroundColorDropdownView.translatesAutoresizingMaskIntoConstraints = false
backgroundColorDropdownView.isHidden = true
backgroundColorDropdownButton.addSubview(backgroundColorDropdownView)
let stackView = UIStackView()
stackView.axis = .vertical
stackView.spacing = 0
stackView.distribution = .fillEqually // All buttons same height
stackView.translatesAutoresizingMaskIntoConstraints = false
backgroundColorDropdownView.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalTo: backgroundColorDropdownView.topAnchor, constant: 32),
stackView.bottomAnchor.constraint(equalTo: backgroundColorDropdownView.bottomAnchor),
stackView.leadingAnchor.constraint(equalTo: backgroundColorDropdownView.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: backgroundColorDropdownView.trailingAnchor),
])
let titles = ["Option 1", "Option 2", "Option 3"]
for title in titles {
let button = UIButton(type: .system)
button.setTitle(title, for: .normal)
button.setTitleColor(.white, for: .normal)
button.backgroundColor = .clear
button.addTarget(self, action: #selector(handleBackgroundColorOption(_:)), for: .touchUpInside)
stackView.addArrangedSubview(button)
}
}
func setupPageTurnDropdown() {
pageTurnDropdownButton.setTitle("Page Turn Mode ▼", for: .normal)
pageTurnDropdownButton.setTitleColor(.white, for: .normal)
pageTurnDropdownButton.isHidden = true
pageTurnDropdownButton.translatesAutoresizingMaskIntoConstraints = false
topBarView.addSubview(pageTurnDropdownButton)
NSLayoutConstraint.activate([
pageTurnDropdownButton.trailingAnchor.constraint(
equalTo: topBarView.trailingAnchor, constant: -16),
pageTurnDropdownButton.centerYAnchor.constraint(equalTo: topBarView.centerYAnchor),
])
pageTurnDropdownButton.addTarget(
self, action: #selector(togglePageTurnDropdown), for: .touchUpInside)
pageTurnDropdownView.backgroundColor = UIColor.darkGray
pageTurnDropdownView.translatesAutoresizingMaskIntoConstraints = false
pageTurnDropdownView.isHidden = true
view.addSubview(pageTurnDropdownView)
let pageTurnOptions = ["Left to right", "Right to left", "Scroll"]
var options: [UIButton] = []
for option in pageTurnOptions {
let button = UIButton(type: .system)
button.setTitle(option, for: .normal)
button.setTitleColor(.white, for: .normal)
button.addTarget(self, action: #selector(handlePageTurnOption), for: .touchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
pageTurnDropdownView.addSubview(button)
options.append(button)
}
var constraints = [
pageTurnDropdownView.topAnchor.constraint(equalTo: topBarView.bottomAnchor),
pageTurnDropdownView.trailingAnchor.constraint(equalTo: topBarView.trailingAnchor),
pageTurnDropdownView.widthAnchor.constraint(equalToConstant: 150),
pageTurnDropdownView.heightAnchor.constraint(
equalToConstant: CGFloat(options.count) * 32),
]
for i in 0...options.count - 1 {
constraints.append(
options[i].topAnchor.constraint(
equalTo: pageTurnDropdownView.topAnchor, constant: CGFloat(i) * 32))
constraints.append(
options[i].leadingAnchor.constraint(
equalTo: pageTurnDropdownView.leadingAnchor, constant: 8))
constraints.append(
options[i].trailingAnchor.constraint(equalTo: pageTurnDropdownView.trailingAnchor))
constraints.append(options[i].heightAnchor.constraint(equalToConstant: 32))
}
NSLayoutConstraint.activate(constraints)
}
@objc func handlePageTurnOption(_ sender: UIButton) {
if let title = sender.currentTitle {
switch title.lowercased() {
case "left to right": mode = .leftToRight
case "right to left": mode = .rightToLeft
case "scroll": mode = .scroll
default: break
}
}
togglePageTurnDropdown()
}
@objc func handleBackgroundColorOption(_ sender: UIButton) {
if let title = sender.currentTitle {
switch title.lowercased() {
case "white": view.backgroundColor = .white
case "gray": view.backgroundColor = .gray
case "black": view.backgroundColor = .black
case "red": view.backgroundColor = .red
case "blue": view.backgroundColor = .blue
default: break
}
}
toggleBackgroundColorDropdown()
}
@objc func togglePageTurnDropdown() {
pageTurnDropdownView.isHidden.toggle()
}
@objc func toggleBackgroundColorDropdown() {
backgroundColorDropdownView.isHidden.toggle()
}
func gestureRecognizer(
@@ -125,9 +289,18 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
}
func toggleTopBar() {
isTopBarVisible.toggle()
topBarView.isHidden.toggle()
topBarHeightConstraint.constant = isTopBarVisible ? 60 : 0 // You can adjust height
topBarHeightConstraint.constant = !topBarView.isHidden ? 60 : 0 // You can adjust height
topBarLabel.isHidden = topBarView.isHidden
pageTurnDropdownButton.isHidden = topBarView.isHidden
backgroundColorDropdownButton.isHidden = topBarView.isHidden
if topBarView.isHidden {
pageTurnDropdownView.isHidden = true
backgroundColorDropdownButton.isHidden = true
}
}
@objc func handleTopTap() {
@@ -170,9 +343,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
func setupImageView() {
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.contentMode = UIView.ContentMode.scaleAspectFit
imageView.clipsToBounds = true
view.addSubview(imageView)