diff --git a/VoidLink/Input/OnScreenWidgetView.swift b/VoidLink/Input/OnScreenWidgetView.swift index 27c3905f..2ee68be3 100644 --- a/VoidLink/Input/OnScreenWidgetView.swift +++ b/VoidLink/Input/OnScreenWidgetView.swift @@ -453,7 +453,7 @@ import ObjectiveC.runtime if !self.cmdString.contains("+"){ // 安全解包并处理 `comboKeyStrings` - if var comboStrings = CommandManager.shared.extractCmdStrings(from: self.cmdString) { + if let comboStrings = CommandManager.shared.extractCmdStrings(from: self.cmdString) { if CommandManager.touchPadCmds.contains(comboStrings.first ?? "") {self.widgetType = WidgetTypeEnum.touchPad} else {self.widgetType = WidgetTypeEnum.button} @@ -3932,6 +3932,23 @@ import ObjectiveC.runtime isRestoringFolderStates = false } + @objc static func getDeepestButton() -> OnScreenWidgetView?{ + var maxIndex: Int = Int.max + var deepestButton: OnScreenWidgetView? + for widget in OnScreenWidgetView.mapping.values.filter({ $0.widgetType == .button}){ + let currentIndex = widget.superview?.subviews.firstIndex(of: widget) + if let currentIndex = currentIndex { + if currentIndex < maxIndex { + maxIndex = currentIndex + deepestButton = widget + } + } + else {continue} + } + OnScreenWidgetView.deepestButton = deepestButton + return deepestButton + } + @objc static func getMaxSequence() -> Int16{ return OnScreenWidgetView.mapping.keys.max() ?? -1 } @@ -4052,7 +4069,7 @@ import ObjectiveC.runtime } deinit { - print("onScreenWidgetView deinit \(self.widgetLabel) \(CACurrentMediaTime())") + print("onScreenWidgetView deinit \(self.widgetLabel))") } } diff --git a/VoidLink/Input/StreamView.m b/VoidLink/Input/StreamView.m index 69acf6d9..b1cc96de 100644 --- a/VoidLink/Input/StreamView.m +++ b/VoidLink/Input/StreamView.m @@ -805,21 +805,8 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; [self->oscProfileMan replaceSelectedProfileWith:profile overwriteDefault:YES]; } - uint64_t buttonIndex = 9999999; - UIView* deepestButton; - for (UIView *subview in self->_streamFrameTopLayerView.subviews) { - if ([subview isKindOfClass:[OnScreenWidgetView class]]) { - OnScreenWidgetView* widget = (OnScreenWidgetView* ) subview; - if(widget.widgetType == WidgetTypeEnumButton){ - uint64_t index = [self->_streamFrameTopLayerView.subviews indexOfObject:subview]; - if (index_streamFrameTopLayerView.subviews) { if ([subview isKindOfClass:[OnScreenWidgetView class]]) { diff --git a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift index 5504d97a..afe5508a 100644 --- a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift +++ b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.swift @@ -492,6 +492,16 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg self.layoutOSC.oscButtonLayerPool.removeAllObjects() } + OnScreenWidgetView.deepestButton = nil; + _ = OnScreenWidgetView.getDeepestButton() + if let deepestButton = OnScreenWidgetView.deepestButton { + for widget in OnScreenWidgetView.mapping.values { + if widget.widgetType == .touchPad { + widget.superview?.insertSubview(widget, belowSubview: deepestButton) + } + } + } + view.bringSubviewToFront(toolbarRootView) }