From e296cce001eafd0ca6fb0cd249e3e718c06ff593 Mon Sep 17 00:00:00 2001 From: Vegard Bieker Matthey Date: Fri, 17 Jul 2026 22:54:26 +0200 Subject: [PATCH] feat: two finger swipe to change brightness --- ImageViewer/ViewController.swift | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/ImageViewer/ViewController.swift b/ImageViewer/ViewController.swift index 52f19d5..c2e22de 100644 --- a/ImageViewer/ViewController.swift +++ b/ImageViewer/ViewController.swift @@ -50,7 +50,7 @@ struct LocalState: Codable { var backgroundColor: String = "black" } -class ViewController: UIViewController, UIGestureRecognizerDelegate { +final class ViewController: UIViewController, UIGestureRecognizerDelegate { let metadataFilename = "metadata.fb" var homeView = UIView() @@ -62,6 +62,9 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { var pendingAlert: UIAlertController? + var initialBrightness: CGFloat = 0 + let dragRangeForFullBrightness: CGFloat = 300 + var imageView = UIImageView() var mode = PageTurnMode.leftToRight var metadataList: [URL: Metadata] = [:] @@ -794,6 +797,11 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { swipeRight.direction = .right readerView.addGestureRecognizer(swipeRight) + let pan = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:))) + pan.minimumNumberOfTouches = 2 + pan.maximumNumberOfTouches = 2 + readerView.addGestureRecognizer(pan) + setupTapZones() } @@ -1303,6 +1311,20 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { } } + @objc private func handlePan(_ gesture: UIPanGestureRecognizer) { + switch gesture.state { + case .began: + initialBrightness = UIScreen.main.brightness + case .changed: + let translation = gesture.translation(in: view) + let delta = -translation.y / dragRangeForFullBrightness + let newBrightness = initialBrightness + delta + UIScreen.main.brightness = min(max(newBrightness, 0.0), 1.0) + default: + break + } + } + func setupImageView() { imageView.translatesAutoresizingMaskIntoConstraints = false // Scaling is done when the image is loaded to avoid scaling on main thread