diff --git a/VoidLink/Localization/Localizable.xcstrings b/VoidLink/Localization/Localizable.xcstrings index f4257490..5f59fb00 100644 --- a/VoidLink/Localization/Localizable.xcstrings +++ b/VoidLink/Localization/Localizable.xcstrings @@ -9015,25 +9015,25 @@ "en" : { "stringUnit" : { "state" : "translated", - "value" : "- VoidLink supports rich, powerful custom on screen widgets including keyboard buttons, gamepad button & joysticks, mouse touchpad & button. Check online document for detail.\n\n- Multi-finger tap gesture is available for launching widget layout tool during streaming." + "value" : "VoidLink supports rich, powerful custom on screen widgets including keyboard buttons, gamepad button & joysticks, mouse touchpad & button. Check online document for detail." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "- VoidLink具备丰富而强大的自定义屏显控件,类型包括:键盘按键、手柄按键和摇杆、鼠标触摸板和按键等。详见在线文档。 \n\n- 可通过多指轻按手势在串流时打开控件布局工具。" + "value" : "VoidLink具备丰富而强大的自定义屏显控件,类型包括:键盘按键、手柄按键和摇杆、鼠标触摸板和按键等。详见在线文档。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "- VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。\n\n- 可透過多指輕點手勢,在串流時開啟控制元件佈局工具。" + "value" : "VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。" } }, "zh-HK" : { "stringUnit" : { "state" : "translated", - "value" : "- VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。\n\n- 可透過多指輕點手勢,在串流時開啟控制元件佈局工具。" + "value" : "VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。" } } } @@ -9049,7 +9049,7 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "透明度: %.2f" } }, @@ -13355,25 +13355,25 @@ "en" : { "stringUnit" : { "state" : "translated", - "value" : "- Touchpad: Dragging works exactly like on Windows laptop touchpad. A quick double-tap, starting from the second tap, enters drag mode.\n\n- Native Touch: Aka multi-touch passthrough, not supported on macOS.\n\n- Single Point: Provides a touchscreen-like experience on macOS." + "value" : "- Touchpad: Windows laptop style touchpad. Double tap and hold to drag, 2-finger tap to click right button, 2-finger slide to scroll mouse wheel.\nTouchpad mode is not recommended for 3D games. Use MousePad on-screen widget instead.\n\n- Native Touch: Use your PC as a Windows tablet. Not supported on macOS host.\n\n- Single Point: Provides a touchscreen-like experience on macOS." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "- 触控板: 拖移方式与Windows笔记本电脑触控板相同, 快速双击的第2下开始进入拖动状态.\n\n- 多点触控: 不支持macOS.\n\n- 单点鼠标: 可为macOS提供类触屏体验." + "value" : "- 触控板: Windows笔记本电脑风格触控板相同, 快速双击并滑动即可拖动,双指快速轻按触发鼠标右键,双指滑动滚动鼠标滚轮。\n不推荐用于3D游戏,游戏时请用 MousePad 屏显控件。\n\n- 多点触控: 以Windows 平板的方式使用PC主机。不支持 macOS 主机\n\n- 单点鼠标: 可为macOS提供类触屏体验." } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "- 觸控板:拖曳方式與 Windows 筆記型電腦觸控板完全相同。快速輕點兩下,從第二次輕點開始進入拖曳模式。\n\n- 多点觸控:macOS 不支援。\n\n- 單點滑鼠:在 macOS 上提供類似觸控螢幕的體驗。" + "value" : "- 觸控板:與 Windows 筆記型電腦風格觸控板相同,快速雙擊並滑動即可拖曳,雙指快速輕按觸發滑鼠右鍵,雙指滑動可捲動滑鼠滾輪。\n不建議用於 3D 遊戲,遊戲時請使用 MousePad 螢幕控制項。\n\n- 多點觸控:以 Windows 平板的方式操作 PC 主機。不支援 macOS 主機。\n\n\n- 單點滑鼠:可為 macOS 提供類觸控螢幕體驗。" } }, "zh-HK" : { "stringUnit" : { - "state" : "needs_review", - "value" : "- 觸控板:拖曳方式與 Windows 筆記型電腦觸控板完全相同。快速輕點兩下,從第二次輕點開始進入拖曳模式。\n\n- 多点觸控:macOS 不支援。\n\n- 單點滑鼠:在 macOS 上提供類似觸控螢幕的體驗。" + "state" : "translated", + "value" : "- 觸控板:與 Windows 筆記型電腦風格觸控板相同,快速雙擊並滑動即可拖曳,雙指快速輕按觸發滑鼠右鍵,雙指滑動可捲動滑鼠滾輪。\n不建議用於 3D 遊戲,遊戲時請使用 MousePad 螢幕控制項。\n\n- 多點觸控:以 Windows 平板的方式操作 PC 主機。不支援 macOS 主機。\n\n\n- 單點滑鼠:可為 macOS 提供類觸控螢幕體驗。" } } } diff --git a/VoidLink/Utility/GenericUtils.swift b/VoidLink/Utility/GenericUtils.swift index f214026e..876c46dd 100644 --- a/VoidLink/Utility/GenericUtils.swift +++ b/VoidLink/Utility/GenericUtils.swift @@ -338,7 +338,35 @@ import UIKit ) } } - + + @objc static var hasChangedTouchMode = false + @objc static func isFirstChangingTouchMode() -> Bool { + guard !hasChangedTouchMode else { return false } + hasChangedTouchMode = true + let key = "hasChangedTouchMode5" + let defaults = UserDefaults.standard + let launchedBefore = defaults.bool(forKey: key) + if !launchedBefore { + defaults.set(true, forKey: key) + return true + } + return false + } + @objc static func handleTouchModeChangingTip(in vc: UIViewController?) { + if isFirstChangingTouchMode() { + AlertControllerUtil.showAlert( + in: vc, + title: LocalizationHelper.localizedString(forKey: "Tips"), + message: "\n\(LocalizationHelper.localizedString(forKey: "touchModeStackTip"))", + withCancel: false, + buttonTitle: LocalizationHelper.localizedString(forKey: "Got it!"), + countdown: 6, + completion: { + } + ) + } + } + @objc static func isFirstTappingInputAccessoryBar() -> Bool { let key = "isFirstTappingInputAccessoryBar" let defaults = UserDefaults.standard diff --git a/VoidLink/ViewControllers/SettingsViewController.m b/VoidLink/ViewControllers/SettingsViewController.m index 520d48d2..b7b70438 100644 --- a/VoidLink/ViewControllers/SettingsViewController.m +++ b/VoidLink/ViewControllers/SettingsViewController.m @@ -3175,17 +3175,15 @@ BOOL isCustomResolution(int resolutionSelected) { } - (void)touchMode1Changed:(UISegmentedControl* )sender { - // [UIView animateWithDuration:0 animations:^{ - self.touchModeSelector2.selectedSegmentIndex = sender.selectedSegmentIndex; - // } completion:^(BOOL finished) { - // 动画完成时执行的代码 - [self touchModeChanged:sender]; - // }]; + [GenericUtils handleTouchModeChangingTipIn:self]; + self.touchModeSelector2.selectedSegmentIndex = sender.selectedSegmentIndex; + [self touchModeChanged:sender]; } - (void)touchModeChanged:(UISegmentedControl* )sender { // Disable On-Screen Controls & Widgets in non-relative touch mode // bool customOscEnabled = [self isOswEnabled] && [self.onScreenWidgetSelector selectedSegmentIndex] == OnScreenControlsLevelCustom; + bool isNativeTouch = sender.selectedSegmentIndex == NativeTouch; bool isEgmerging = self.enableOswSwitchStack.hidden != !isNativeTouch && isNativeTouch; self.enableOswSwitchStack.hidden = !isNativeTouch;