From ce21c398b5daa138d4ada798d83f77e54a9a8447 Mon Sep 17 00:00:00 2001 From: TrueZhuanjia Date: Fri, 25 Jul 2025 00:36:04 +0800 Subject: [PATCH] - fix on-screen widget tool selectedWidgetView bug - update & replace new widget template bin file --- VoidLink/Input/CustomOSC/OSCProfile.h | 3 +- VoidLink/Input/CustomOSC/OSCProfilesManager.h | 2 +- VoidLink/Input/CustomOSC/OSCProfilesManager.m | 12 +++++--- VoidLink/Input/OnScreenWidgetView.swift | 2 +- VoidLink/PresetConfigs/widgetTemplates.bin | Bin 50741 -> 125388 bytes .../LayoutOnScreenControlsViewController.m | 28 +++++++++--------- 6 files changed, 26 insertions(+), 21 deletions(-) diff --git a/VoidLink/Input/CustomOSC/OSCProfile.h b/VoidLink/Input/CustomOSC/OSCProfile.h index ff22b639..04dc2af5 100644 --- a/VoidLink/Input/CustomOSC/OSCProfile.h +++ b/VoidLink/Input/CustomOSC/OSCProfile.h @@ -13,7 +13,8 @@ #import "OnScreenButtonState.h" NS_ASSUME_NONNULL_BEGIN -#define DEFAULT_TEMPLATE_NAME @"高级控件模板(Advanced widget templates)" +#define DEFAULT_TEMPLATE_NAME1 @"控件模板 / Widget templates" +#define DEFAULT_TEMPLATE_NAME2 @"旧版屏显控件 / Legacy on-screen controls" /** This object contains information pertaining to any of the user created, custom on screen controller layout configurations, or 'profiles.' The object contains a 'name' property for easy reference, as well as an 'isSelected' property which is used to determine whether this particular custom OSC layout should show on screen during game stream view. Only one 'OSCProfile' is set to 'isSelected' at any given time. The object also contains an array of 'OnScreenButtonStates' which provides information that allows us to move and hide/unhide each of the 19 on screen buttons. Note that the 'buttonStates' property should contain an NSMutableArray of ENCODED 'OnScreenButtonState' objects. This allows us to save the 'OSCProfile' object to NSUserDefaults. diff --git a/VoidLink/Input/CustomOSC/OSCProfilesManager.h b/VoidLink/Input/CustomOSC/OSCProfilesManager.h index 93cf5afc..58cc6bf3 100644 --- a/VoidLink/Input/CustomOSC/OSCProfilesManager.h +++ b/VoidLink/Input/CustomOSC/OSCProfilesManager.h @@ -68,7 +68,7 @@ NS_ASSUME_NONNULL_BEGIN * Lets the caller of this method know whether a profile with a given name already exists in persistent storage */ - (BOOL) profileNameAlreadyExist:(NSString*)name; -- (BOOL) profileName:(NSString*) name alreadyExistIn:(NSMutableArray*)profiles; +- (OSCProfile *) findProfileByName:(NSString*) name inProfileArray:(NSMutableArray*)profiles; @end diff --git a/VoidLink/Input/CustomOSC/OSCProfilesManager.m b/VoidLink/Input/CustomOSC/OSCProfilesManager.m index fd469676..bc1e0141 100644 --- a/VoidLink/Input/CustomOSC/OSCProfilesManager.m +++ b/VoidLink/Input/CustomOSC/OSCProfilesManager.m @@ -142,7 +142,11 @@ static CGRect streamViewBounds; - (void) importEncodedProfiles:(NSMutableArray* )profilesEncoded { NSMutableArray* targetProfiles = [_currentProfiles mutableCopy]; //_currentProfiles is availabled as long as getAllProfiles was called before calling this method (_currentProfiles avoids frequent accessing persisted data) - if([self profileName:DEFAULT_TEMPLATE_NAME alreadyExistIn:targetProfiles] && targetProfiles.count > 1) [targetProfiles removeObjectAtIndex:1]; + OSCProfile* profile; + profile = [self findProfileByName:DEFAULT_TEMPLATE_NAME1 inProfileArray:targetProfiles]; + if(profile && targetProfiles.count > 1) [targetProfiles removeObject:profile]; + profile = [self findProfileByName:DEFAULT_TEMPLATE_NAME2 inProfileArray:targetProfiles]; + if(profile && targetProfiles.count > 1) [targetProfiles removeObject:profile]; if(targetProfiles.count > 0) [targetProfiles removeObjectAtIndex:0]; NSMutableArray* localEncodedPofiles = [self encodedProfilesFromArray:targetProfiles]; [profilesEncoded addObjectsFromArray:localEncodedPofiles]; @@ -393,14 +397,14 @@ static CGRect streamViewBounds; return NO; } -- (BOOL) profileName:(NSString*) name alreadyExistIn:(NSMutableArray*)profiles { +- (OSCProfile *) findProfileByName:(NSString*) name inProfileArray:(NSMutableArray*)profiles { /* Iterate through the decoded profiles and return 'YES' if one of the profiles' 'name' properties equals the 'name' passed into this method */ for (OSCProfile *profile in profiles) { if ([profile.name isEqualToString:name]) { - return YES; + return profile; } } - return NO; + return nil; } - (OnScreenButtonState *)unarchiveButtonStateEncoded:(NSData *)data { diff --git a/VoidLink/Input/OnScreenWidgetView.swift b/VoidLink/Input/OnScreenWidgetView.swift index f2e0c994..cca8b716 100644 --- a/VoidLink/Input/OnScreenWidgetView.swift +++ b/VoidLink/Input/OnScreenWidgetView.swift @@ -587,7 +587,7 @@ import UIKit // illustrate offset distance in edit mode // let offsetSign = self.selfViewOnTheRight ? -1 : 1 // dprecated // let illlustrationPoint = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame)/4) - self.crossMarkLayer.position = CGPointMake(CGRectGetMidX(self.stickBallLayer.frame), CGRectGetMidY(self.stickBallLayer.frame)-stickIndicatorOffset) + self.stickBallLayer.position = CGPointMake(CGRectGetMidX(self.crossMarkLayer.frame), CGRectGetMidY(self.crossMarkLayer.frame)-stickIndicatorOffset) } CATransaction.commit() } diff --git a/VoidLink/PresetConfigs/widgetTemplates.bin b/VoidLink/PresetConfigs/widgetTemplates.bin index 4ca211d17b6f5eaf848555462eb535e404e2e0d3..5d091aa22d00de634a849a2b2cc38df741bac9e3 100755 GIT binary patch literal 125388 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 Q!U&-mplKS)V|>W~000%dDgXcg literal 50741 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 diff --git a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m index e1ca4231..fd720ff9 100644 --- a/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m +++ b/VoidLink/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m @@ -81,9 +81,8 @@ - (void) reloadOnScreenWidgetViews { NSLog(@"reloadOnScreenWidgets %f", CACurrentMediaTime()); OnScreenWidgetView.editMode = true; - [self->selectedWidgetView.stickBallLayer removeFromSuperlayer]; - [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; - + [self clearStickIndicator]; + for (UIView *subview in self.view.subviews) { if ([subview isKindOfClass:[OnScreenWidgetView class]]) { [subview removeFromSuperview]; @@ -168,7 +167,7 @@ [profilesManager saveProfileWithName:@"Default" andButtonLayers:self.layoutOSC.OSCButtonLayers]; [profilesManager importDefaultTemplates]; }*/ - if (![profilesManager profileName:DEFAULT_TEMPLATE_NAME alreadyExistIn:allProfiles]){ + if (![profilesManager findProfileByName:DEFAULT_TEMPLATE_NAME1 inProfileArray:allProfiles]){ [profilesManager importDefaultTemplates]; } @@ -655,6 +654,11 @@ label.numberOfLines = 1; } +- (void)clearStickIndicator{ + [self->selectedWidgetView.stickBallLayer removeFromSuperlayer]; + [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; +} + - (void)widgetViewTapped: (NSNotification *)notification{ //self.undoButton.alpha = selectedWidgetView.layoutChanges.count>1 && !CGPointEqualToPoint(selectedWidgetView.layoutChanges.lastObject.CGPointValue, selectedWidgetView.initialCenter)? 1.0 : 0.3; @@ -663,8 +667,7 @@ OnScreenWidgetView* widgetView = (OnScreenWidgetView* )notification.object; - [self->selectedWidgetView.stickBallLayer removeFromSuperlayer]; - [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; + [self clearStickIndicator]; self->widgetViewSelected = true; self->controllerLayerSelected = false; self->selectedWidgetView = widgetView; @@ -705,8 +708,7 @@ } if(showStickIndicatorOffsetStack){ // illustrating the indicator offset, - [selectedWidgetView.stickBallLayer removeFromSuperlayer]; - [selectedWidgetView.crossMarkLayer removeFromSuperlayer]; + [self clearStickIndicator]; selectedWidgetView.touchBeganLocation = CGPointMake(CGRectGetWidth(selectedWidgetView.frame)/2, CGRectGetHeight(selectedWidgetView.frame)/4); [selectedWidgetView showStickIndicator];// this will create the indicator CAShapeLayers [self.stickIndicatorOffsetSlider setValue:self->selectedWidgetView.stickIndicatorOffset]; @@ -743,8 +745,7 @@ - (void)legacyOscLayerTapped: (NSNotification *)notification{ [self enableCommonWidgetTools]; CALayer* controllerLayer = (CALayer* )notification.object; - [self->selectedWidgetView.stickBallLayer removeFromSuperlayer]; - [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; + [self clearStickIndicator]; self->widgetViewSelected = false; self->selectedWidgetView = nil; @@ -1120,6 +1121,8 @@ - (void) presentProfilesTableView{ [self saveTapped:nil]; + [self clearStickIndicator]; + selectedWidgetView = nil; UIStoryboard *storyboard; BOOL isIPhone = ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone); if (isIPhone) { @@ -1144,8 +1147,6 @@ self.widgetPanelStack.hidden = YES; - [self->selectedWidgetView.stickBallLayer removeFromSuperlayer]; - [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; _oscProfilesTableViewController.currentOSCButtonLayers = self.layoutOSC.OSCButtonLayers; [self presentViewController:_oscProfilesTableViewController animated:YES completion:nil]; @@ -1252,8 +1253,7 @@ if(!isToolbarHidden && self->selectedWidgetView != nil && [self layerIsOverlappingWithTrashcanButton:selectedWidgetView.layer]){ [self->selectedWidgetView removeFromSuperview]; [self.OnScreenWidgetViews removeObject:self->selectedWidgetView]; - [selectedWidgetView.stickBallLayer removeFromSuperlayer]; - [selectedWidgetView.crossMarkLayer removeFromSuperlayer]; + [self clearStickIndicator]; [selectedWidgetView.buttonDownVisualEffectLayer removeFromSuperlayer]; }