From 67af68fcf12fa4fa9d4c01ae2aa0cff237c994fc Mon Sep 17 00:00:00 2001 From: TrueZhuanjia Date: Sat, 4 Oct 2025 16:44:43 +0800 Subject: [PATCH] - motion control demo1 - feat: movable on-screen functional buttons --- VoidLink.xcodeproj/project.pbxproj | 8 + VoidLink/.DS_Store | Bin 14340 -> 10244 bytes VoidLink/Base.lproj/iPad.storyboard | 25 +- VoidLink/Base.lproj/iPhone.storyboard | 41 ++-- VoidLink/Input/CommandManager.swift | 4 +- VoidLink/Input/CustomOSC/OSCProfile.h | 2 +- VoidLink/Input/CustomOSC/OSCProfile.m | 6 +- VoidLink/Input/CustomOSC/OSCProfilesManager.h | 3 + VoidLink/Input/CustomOSC/OSCProfilesManager.m | 36 +-- .../Input/CustomOSC/OnScreenButtonState.h | 10 +- .../Input/CustomOSC/OnScreenButtonState.m | 13 +- VoidLink/Input/MotionHandler.swift | 216 ++++++++++++++++++ VoidLink/Input/NativeTouchHandler.m | 38 +-- VoidLink/Input/OnScreenControls.h | 4 +- VoidLink/Input/OnScreenControls.m | 16 +- VoidLink/Input/OnScreenWidgetView.swift | 209 +++++++++++++---- VoidLink/Input/PureNativeTouchHandler.m | 33 +-- VoidLink/Input/StreamView.h | 3 +- VoidLink/Input/StreamView.m | 103 ++++++--- VoidLink/Utility/UUIDHelper.swift | 17 ++ .../LayoutOnScreenControlsViewController.h | 4 +- .../LayoutOnScreenControlsViewController.m | 39 ++-- .../ViewControllers/SettingsViewController.m | 22 +- .../StreamFrameViewController.h | 6 +- .../StreamFrameViewController.m | 28 ++- VoidLink/mul.lproj/iPad.xcstrings | 40 +++- VoidLink/mul.lproj/iPhone.xcstrings | 50 +++- 27 files changed, 731 insertions(+), 245 deletions(-) create mode 100644 VoidLink/Input/MotionHandler.swift create mode 100644 VoidLink/Utility/UUIDHelper.swift diff --git a/VoidLink.xcodeproj/project.pbxproj b/VoidLink.xcodeproj/project.pbxproj index 4859dd7c..d57918aa 100644 --- a/VoidLink.xcodeproj/project.pbxproj +++ b/VoidLink.xcodeproj/project.pbxproj @@ -15,11 +15,13 @@ 1829CE3F2E2154DF0074A99A /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1829CE3E2E2154DF0074A99A /* SceneDelegate.m */; }; 18341A042DEB662C0094E5F2 /* FixedTintImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18341A032DEB662C0094E5F2 /* FixedTintImageView.m */; }; 1850C82A2E667E4000845308 /* MicHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1850C8292E667E4000845308 /* MicHandler.swift */; }; + 18729EDE2E8BD68800101194 /* UUIDHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18729EDD2E8BD68800101194 /* UUIDHelper.swift */; }; 187F4B282E04658A00EECC59 /* WidgetPanelStackView.m in Sources */ = {isa = PBXBuildFile; fileRef = 187F4B272E04658A00EECC59 /* WidgetPanelStackView.m */; }; 1888C1922E24C33100108730 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1888C1912E24C33100108730 /* AboutViewController.swift */; }; 1888C1932E24C41000108730 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1888C1902E24C2C800108730 /* AboutView.swift */; }; 188973D32E386A670025E48C /* widgetTemplatesIPhone.bin in Resources */ = {isa = PBXBuildFile; fileRef = 188973D22E386A670025E48C /* widgetTemplatesIPhone.bin */; }; 189AD29A2DE7446000E24B88 /* HostCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 189AD2992DE7446000E24B88 /* HostCollectionViewController.m */; }; + 18E4BCEA2E891895000A8657 /* MotionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18E4BCE92E891895000A8657 /* MotionHandler.swift */; }; 840751B32BF49C050096B657 /* CustomTapGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 840751B22BF49C050096B657 /* CustomTapGestureRecognizer.m */; }; 841BAC922DE35D6B00DA639E /* ThemeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 841BAC912DE35D6B00DA639E /* ThemeManager.m */; }; 84203F232C5F24C00032EEED /* OnScreenWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84203F222C5F24C00032EEED /* OnScreenWidgetView.swift */; }; @@ -164,6 +166,7 @@ 18341A022DEB65AB0094E5F2 /* FixedTintImageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FixedTintImageView.h; sourceTree = ""; }; 18341A032DEB662C0094E5F2 /* FixedTintImageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FixedTintImageView.m; sourceTree = ""; }; 1850C8292E667E4000845308 /* MicHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MicHandler.swift; sourceTree = ""; }; + 18729EDD2E8BD68800101194 /* UUIDHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UUIDHelper.swift; sourceTree = ""; }; 187F4B232E04633100EECC59 /* WidgetPanelStackView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WidgetPanelStackView.h; sourceTree = ""; }; 187F4B272E04658A00EECC59 /* WidgetPanelStackView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WidgetPanelStackView.m; sourceTree = ""; }; 1888C1902E24C2C800108730 /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = ""; }; @@ -172,6 +175,7 @@ 189AD2962DE743B700E24B88 /* HostCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HostCollectionViewController.h; sourceTree = ""; }; 189AD2992DE7446000E24B88 /* HostCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HostCollectionViewController.m; sourceTree = ""; }; 18BF141D2E0D7A00009DEE4F /* VoidLink v1.0.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "VoidLink v1.0.xcdatamodel"; sourceTree = ""; }; + 18E4BCE92E891895000A8657 /* MotionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MotionHandler.swift; sourceTree = ""; }; 693B3A9A218638CD00982F7B /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; 840751B12BF49B5A0096B657 /* CustomTapGestureRecognizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CustomTapGestureRecognizer.h; sourceTree = ""; }; 840751B22BF49C050096B657 /* CustomTapGestureRecognizer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CustomTapGestureRecognizer.m; sourceTree = ""; }; @@ -701,6 +705,7 @@ 988FCD3F293B091B003050E2 /* KeyboardInputField.h */, 988FCD40293B091B003050E2 /* KeyboardInputField.m */, 1850C8292E667E4000845308 /* MicHandler.swift */, + 18E4BCE92E891895000A8657 /* MotionHandler.swift */, 84E1CDEB2C4F67D300547904 /* CommandManager.swift */, 84203F222C5F24C00032EEED /* OnScreenWidgetView.swift */, 1817B61D2E6FD04D000D938D /* SafeTimer.swift */, @@ -743,6 +748,7 @@ FB89461E19F646E200339C8A /* Utility */ = { isa = PBXGroup; children = ( + 18729EDD2E8BD68800101194 /* UUIDHelper.swift */, 97E20DD42E2164A9000D5DCA /* BandwidthTracker.h */, 97E20DD52E2164A9000D5DCA /* BandwidthTracker.m */, 97E20DD62E2164A9000D5DCA /* FloatBuffer.h */, @@ -1067,6 +1073,7 @@ 84351B2C2C29AD6100A77989 /* OSCProfilesTableViewController.m in Sources */, 98D585701C0ED0E800F6CC00 /* TemporarySettings.m in Sources */, 1829CE3F2E2154DF0074A99A /* SceneDelegate.m in Sources */, + 18729EDE2E8BD68800101194 /* UUIDHelper.swift in Sources */, FB89462819F646E200339C8A /* CryptoManager.m in Sources */, DC1F5A07206436B20037755F /* ConnectionHelper.m in Sources */, FB89462E19F646E200339C8A /* PairManager.m in Sources */, @@ -1091,6 +1098,7 @@ 18341A042DEB662C0094E5F2 /* FixedTintImageView.m in Sources */, FB89463119F646E200339C8A /* StreamManager.m in Sources */, 84351B2D2C29AD6100A77989 /* ToolBarContainerView.m in Sources */, + 18E4BCEA2E891895000A8657 /* MotionHandler.swift in Sources */, 988FCD41293B091B003050E2 /* KeyboardInputField.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/VoidLink/.DS_Store b/VoidLink/.DS_Store index d331c5b61d5de9427ab4290f6f9281b88636252e..af91099b7496ebe7e7e723a5dc2273756f93404e 100644 GIT binary patch delta 203 zcmZoEXbF&DU|?W$DortDU{GLSVBlbY&;mRY3&ketNlrE}VUc8DU|>)KsbgReU|`5+ z$YID~NM%T7DA~MGB8q+D1JBLu94s7+YMbXMcrs5eRneF%sv65v7F?8RCBn13~dYy3Lu&R0YLH~j1Ymcm_g<+Fff=gFfcGP zFbFU(6fl%Blz8UkCnx1V)!?I;p!!)D7#LU?JQ?zk_2(xsfQ@8IXJBBM_a6*EhB4h@ zU|^E{{~yF2#iJoG8UmvsFd71*Aut*OB!>VaLR8YIQQ$iM(i~6CSLO5!`5J0EvOLf@qLd5Dn7GzzAZ2%>Zj7rr=76;`FfxF(GcYoMwKFh+ZDwF#glK1AglK1Ag!WJvA=()jA=()jA=<%ajuN9G zFd71=As~m^_f9G=E=bA&_r13z735?VmlzmaV`O4xVP#|IVCUfGhz-ujFApwBEGaE^ zN-T;7@j~+RbCO`}#H6sy)be-%5$F88lElos)FP0Q;LMcNq{O0_@XWlF{Bo!K(!7*n zuwJMH2PX$-yntABwWX1vj)Fn0jzYDirKOI7nWb56EhmSlvc7dte0EN5UVaC}`LJSu zffvGulbxvkDGM&j%gN6JjUj*v4iN?)hD?TBhE#?ehD?TZh75)h23_#TLmERqgC0Wx zSiBfEh5-%-0R{%9tEgiT4A{*HU?^fpWk_SlWT*g}mCTR<84H1#!{Erkz{m$4%7Bbt zh+%P$9zz8~GD8YOB0~v7B10}iK0^xFy(wsBt*68+v~b~J@L|YjNM=X``@afocP2wV zLmsM~jIwBUvN7Z`Br;?&X2N^%K%AH#b6gWgW?06y3!enQQg5X3(cSW48aV^;LuKGZ~@z$ z%8(9@)l|%IX81*tZnQ9Fj6&1R#t_U<0?rAE=xKrhlxC5Ah@y5_lszauLd#`*3?U2| z45{Gq$Cn|IA&()EAsw0~&`Ju%U1*_-PcK@GFiD~5q4`O5tPf3bqRp&0;Sbl$Y?Iue>n3v<4*<#MpE>n*$>XI$oknCLct{qsC+MBs6@>t zpmH3=Hhy?`fLsj9v!F5|ham^-YV=$ND!tz!hqs4t_EKQ;@1S-N*d3BsbYp8x;WrVv#utXRRY9ge z+G0fX7D2ry20f6gpnW~!OhIc;f_f+@rtm`DLa-MFYCjXH6U|Og8yZC?7lRW+A_J(` zhqIpwYB!_k5n%v@7IK>#)B}XIW^uN^LG5R<%t7-5sAY{}4jY3rLlHwILjgkxLq2LN z92`?fD>@iB7+k=8(?o_Oh`-U)uSXkw!B9UeTG|-CLTg)dfcx{fQ-my9D2Xt*fk&cJ z8B!QRz-{jm22b#K4XDqFGev+$17wl%5wYf=r3mo20J1qO3~t~N4CwkG*q9hN^&_VS zJ_Zkle1>9%5(a06M1~@U6r?faSWk%X`WQf6`)boiL@4$PbP1q5LO$ediVj&$=T^eprK*s{G9wEr<~H%cme+6jQn!X?oF{Jh8*utQ2xb3OCY^5X@BK#uV*07(^xr4|)u=I4PNi=rnYGO?&AF)uyUsWLVv zF)202KhG(@q$EE#A~QKZ59A53?ZE|!$(ecS%Jv^1;m@h;pax+HFepP93=GN+WuT>c z3=AA1Fd-<-7?PKtm&&Q^-~$m*cJPKU7&sVo8JrnH8R8g<8JZYoGAw1-$gqdu9K&sf z4~$HVJd9F|%8dGq7L1mRPK+*$zKmgv;fxuKxr}*? - + @@ -1426,7 +1426,7 @@ - + @@ -1838,7 +1838,7 @@ -