diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index eb8c3a47b..0888355f3 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -123,6 +123,8 @@ class ArticleViewController: UIViewController { webView.navigationDelegate = self webView.uiDelegate = self + webView.addInteraction(UIContextMenuInteraction(delegate: self)) + webView.configuration.userContentController.add(WrapperScriptMessageHandler(self), name: MessageName.imageWasClicked) webView.configuration.userContentController.add(WrapperScriptMessageHandler(self), name: MessageName.imageWasShown) @@ -340,6 +342,44 @@ class ArticleViewController: UIViewController { } +// MARK: InteractiveNavigationControllerTappable + +extension ArticleViewController: InteractiveNavigationControllerTappable { + func didTapNavigationBar() { + hideBars() + } +} + +// MARK: UIContextMenuInteractionDelegate + +extension ArticleViewController: UIContextMenuInteractionDelegate { + func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? { + + return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { suggestedActions in + let action1 = UIAction(title: "Action 1", image: AppAssets.infoImage) { [weak self] action in + } + let action2 = UIAction(title: "Action 2", image: AppAssets.infoImage) { [weak self] action in + } + let action3 = UIAction(title: "Action 3", image: AppAssets.infoImage) { [weak self] action in + } + let action4 = UIAction(title: "Action 4", image: AppAssets.infoImage) { [weak self] action in + } + let action5 = UIAction(title: "Action 5", image: AppAssets.infoImage) { [weak self] action in + } + let action6 = UIAction(title: "Action 6", image: AppAssets.infoImage) { [weak self] action in + } + let action7 = UIAction(title: "Action 7", image: AppAssets.infoImage) { [weak self] action in + } + return UIMenu(title: "", children: [action1, action2, action3, action4, action5, action6, action7]) + } + } + + func contextMenuInteraction(_ interaction: UIContextMenuInteraction, previewForHighlightingMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? { + return UITargetedPreview(view: webView, parameters: CroppingPreviewParameters(view: webView, size: CGSize(width: webView.bounds.width, height: 200))) + } + +} + // MARK: WKNavigationDelegate extension ArticleViewController: WKNavigationDelegate { @@ -376,14 +416,6 @@ extension ArticleViewController: WKNavigationDelegate { } -// MARK: InteractiveNavigationControllerTappable - -extension ArticleViewController: InteractiveNavigationControllerTappable { - func didTapNavigationBar() { - hideBars() - } -} - // MARK: WKUIDelegate extension ArticleViewController: WKUIDelegate { diff --git a/iOS/UIKit Extensions/CroppingPreviewParameters.swift b/iOS/UIKit Extensions/CroppingPreviewParameters.swift index 58a19dfbf..c99f6e404 100644 --- a/iOS/UIKit Extensions/CroppingPreviewParameters.swift +++ b/iOS/UIKit Extensions/CroppingPreviewParameters.swift @@ -17,4 +17,11 @@ class CroppingPreviewParameters: UIPreviewParameters { self.visiblePath = visiblePath } + init(view: UIView, size: CGSize) { + super.init() + let newBounds = CGRect(x: 0, y: 0, width: size.width, height: size.height) + let visiblePath = UIBezierPath(roundedRect: newBounds, cornerRadius: 10) + self.visiblePath = visiblePath + } + } diff --git a/iOS/UIKit Extensions/TickMarkSlider.swift b/iOS/UIKit Extensions/TickMarkSlider.swift index 9c111c738..a6b8f7b2c 100644 --- a/iOS/UIKit Extensions/TickMarkSlider.swift +++ b/iOS/UIKit Extensions/TickMarkSlider.swift @@ -13,9 +13,12 @@ class TickMarkSlider: UISlider { private var enableFeedback = false private let feedbackGenerator = UISelectionFeedbackGenerator() + private var roundedValue: Float? override var value: Float { didSet { - if enableFeedback && value.truncatingRemainder(dividingBy: 1) == 0 { + let testValue = value.rounded() + if testValue != roundedValue && enableFeedback && value.truncatingRemainder(dividingBy: 1) == 0 { + roundedValue = testValue feedbackGenerator.selectionChanged() } } @@ -66,6 +69,12 @@ class TickMarkSlider: UISlider { } } + + override func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { + let result = super.continueTracking(touch, with: event) + value = value.rounded() + return result + } override func endTracking(_ touch: UITouch?, with event: UIEvent?) { value = value.rounded()