【问题标题】:How to pull a value from a slider on 32 and 64 bit?如何从 32 位和 64 位的滑块中提取值?
【发布时间】:2014-02-15 01:47:02
【问题描述】:

我在 Preference Bundle 中有一个 SliderCell,用于我正在开发的 iOS 7 调整。在任何 32 但设备上,当从滑块中拉出值时,调整工作正常。但是在 64 位设备上它不能正常工作并且它总是默认为 0.0

static float blur;
static float tint;

NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:@"/var/mobile/Library/Preferences/com.bla.blarfr~prefs.plist"];

static void NBLoad()
{
blur = [dict objectForKey:@"blurf"] ? [[dict objectForKey:@"blurf"] floatValue] : 0.0f;
tint = [dict objectForKey:@"tintf"] ? [[dict objectForKey:@"tintf"] floatValue] : 0.0f;
}

%hook UIKBFactory
-(float) tintAlpha {
NBLoad();
if ([[dict objectForKey:@"enabled"] boolValue])
{
    return tint;
}
else
{
    return %orig;
}
}
-(float) blurRadius {
NBLoad();
if ([[dict objectForKey:@"enabled"] boolValue])
{
    return blur;
}
else
{
    return %orig;
}
}
%end

如果我确实将所有浮点数更改为双精度,则它在 64 位上工作正常,反之亦然。有什么办法可以让代码在两个设备上都能正常工作?

【问题讨论】:

    标签: ios jailbreak tweak theos


    【解决方案1】:

    我最近遇到了这个问题,一位开发人员为我指出了正确的方向。您需要做的是使用 %group 创建两个钩子组,将 %ctor 添加到文件末尾并在某个条件后对组进行 %init 。这是一个小例子:

    %group 32bit
    %hook Class
    -(float) tintAlpha {
        return float;
    }
    %end
    %end
    
    %group 64bit
    %hook Class
    -(double) tintAlpha {
        return double;
    }
    %end
    %end
    
    %ctor {
        if (deviceIs64bit) {
            %init(64bit);
        }
        else {
            %init(32bit);
        }
     }
    

    对于“deviceIs64bit”,我检查了硬件版本(即 iPhone 6,1),我发现其他所有内容都与运行时不兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2018-11-15
      • 2023-03-03
      • 2012-10-26
      相关资源
      最近更新 更多