This commit is contained in:
Isaac 2025-11-12 01:23:36 +08:00
parent dff6e560d2
commit 9fce079880
2 changed files with 30 additions and 25 deletions

View file

@ -196,33 +196,38 @@ static void replacement_backdropLayerDidChangeLuma(UIView *self, SEL selector, C
original_backdropLayerDidChangeLuma(self, selector, layer, luma);
}
static NSString *TGEncodeText(NSString *string, int key) {
NSMutableString *result = [[NSMutableString alloc] init];
for (int i = 0; i < (int)[string length]; i++) {
unichar c = [string characterAtIndex:i];
c += key;
[result appendString:[NSString stringWithCharacters:&c length:1]];
}
return result;
}
static void registerEffectViewOverrides(void) {
int classCount = objc_getClassList(NULL, 0);
if (classCount > 0) {
__unsafe_unretained Class *classList = (Class *)malloc(classCount * sizeof(Class));
objc_getClassList(classList, classCount);
NSString *searchString = [@"UISD" stringByAppendingString:@"FBackdropView"];
NSString *selectorString = [@"backdropLayer" stringByAppendingString:@":didChangeLuma:"];
for (int i = 0; i < classCount; i++)
{
const char *className = class_getName(classList[i]);
NSString *name = [[NSString alloc] initWithCString:className encoding:NSASCIIStringEncoding];
if ([name hasSuffix:searchString]) {
Method method = (Method)[RuntimeUtils getMethodOfClass:classList[i] selector:NSSelectorFromString(selectorString)];
if (method) {
const char *typeEncoding = method_getTypeEncoding(method);
if (strcmp(typeEncoding, "v32@0:8@16d24") == 0) {
original_backdropLayerDidChangeLuma = (id (*)(id, SEL, CALayer *, double))method_getImplementation(method);
[RuntimeUtils replaceMethodImplementationOfClass:classList[i] selector:NSSelectorFromString(selectorString) replacement:(IMP)&replacement_backdropLayerDidChangeLuma];
}
}
break;
}
NSMutableArray<NSString *> *nameList = [[NSMutableArray alloc] init];
[nameList addObject:TGEncodeText(@"_TtC5UIKitP33_ACD4A08F4BE9D00246F2A9C24A80CA8817UISDFBackdropView", 0)];
NSString *selectorString = [@"backdropLayer" stringByAppendingString:@":didChangeLuma:"];
for (NSString *name in nameList) {
Class classValue = NSClassFromString(name);
if (classValue == nil) {
continue;
}
free(classList);
Method method = (Method)[RuntimeUtils getMethodOfClass:classValue selector:NSSelectorFromString(selectorString)];
if (method) {
const char *typeEncoding = method_getTypeEncoding(method);
if (strcmp(typeEncoding, "v32@0:8@16d24") == 0) {
original_backdropLayerDidChangeLuma = (id (*)(id, SEL, CALayer *, double))method_getImplementation(method);
[RuntimeUtils replaceMethodImplementationOfClass:classValue selector:NSSelectorFromString(selectorString) replacement:(IMP)&replacement_backdropLayerDidChangeLuma];
}
}
break;
}
}