From dc6a86f846132ae6e6474c80b1661a84ddf98d3c Mon Sep 17 00:00:00 2001 From: Jed Fox Date: Wed, 21 Dec 2022 19:29:12 -0500 Subject: [PATCH] Extract out TouchTransparentStackView --- .../MediaPreviewViewController.swift | 16 ------------ .../Container/TouchTransparentStackView.swift | 26 +++++++++++++++++++ 2 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 MastodonSDK/Sources/MastodonUI/View/Container/TouchTransparentStackView.swift diff --git a/Mastodon/Scene/MediaPreview/MediaPreviewViewController.swift b/Mastodon/Scene/MediaPreview/MediaPreviewViewController.swift index 4ff54934b..658bca33d 100644 --- a/Mastodon/Scene/MediaPreview/MediaPreviewViewController.swift +++ b/Mastodon/Scene/MediaPreview/MediaPreviewViewController.swift @@ -26,22 +26,6 @@ final class MediaPreviewViewController: UIViewController, NeedsDependency { let pagingViewController = MediaPreviewPagingViewController() let topToolbar: UIStackView = { - class TouchTransparentStackView: UIStackView { - // allow button hit boxes to grow outside of this view’s bounds - override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - subviews.contains { $0.point(inside: $0.convert(point, from: self), with: event) } - } - - // allow taps on blank areas to pass through - override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { - let view = super.hitTest(point, with: event) - if view == self { - return nil - } - return view - } - } - let stackView = TouchTransparentStackView() stackView.axis = .horizontal stackView.distribution = .equalSpacing diff --git a/MastodonSDK/Sources/MastodonUI/View/Container/TouchTransparentStackView.swift b/MastodonSDK/Sources/MastodonUI/View/Container/TouchTransparentStackView.swift new file mode 100644 index 000000000..e519c0cf7 --- /dev/null +++ b/MastodonSDK/Sources/MastodonUI/View/Container/TouchTransparentStackView.swift @@ -0,0 +1,26 @@ +// +// TouchTransparentStackView.swift +// +// +// Created by Jed Fox on 2022-12-21. +// + +import UIKit + +/// A subclass of `UIStackView` that allows touches that aren’t captured by any +/// of its subviews to pass through to views beneath this view in the Z-order. +public class TouchTransparentStackView: UIStackView { + // allow subview hit boxes to grow outside of this view’s bounds + public override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { + subviews.contains { $0.point(inside: $0.convert(point, from: self), with: event) } + } + + // allow taps on blank areas to pass through + public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + let view = super.hitTest(point, with: event) + if view == self { + return nil + } + return view + } +}