将iPhone应用转换为通用二进制

时间:2011-05-18 11:21:15

标签: iphone objective-c ipad

我有一款iPhone游戏,我希望将项目转换为通用项目。事实上,我已经通过调整目标已经这样做了。 问题是:例如,UIButtons不会调整大小并且不会重新定位。

问题:创建按钮的正确方法是什么?如果通用应用程序在Pad上运行,它会自动调整其大小?

目前我正在制作这样的按钮:

    [self setSettingsButton:[UIButton buttonWithType:UIButtonTypeCustom]];
    [settingsButton setFrame:CGRectMake(38, 121, 30, 180)];
    [settingsButton setBackgroundImage:[UIImage imageNamed:@"SettingsButton.png"] forState:UIControlStateNormal];
    [settingsButton addTarget:self action:@selector(prefButtonClick) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:settingsButton];

嗯,是的,很明显,当他们应该是相对的时候,位置和大小是绝对的,但我的问题是:如何使他们相对

非常感谢你的帮助!

4 个答案:

答案 0 :(得分:2)

在这种情况下我看到两种方式:

1)

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    [settingsButton setFrame:CGRectMake(38, 121, 30, 180)];
}
else {
    [settingsButton setFrame:CGRectMake(131, 145, 60, 250)]; // your iPad values
}

2)

CGRect bounds = self.view.bounds; // Here we get VC views frame size
CGRect buttonFrame = CGRectZero;
buttonsFrame.origin.x = bounds.size.width * 1.0/3.0;   // Yours calculations
buttonsFrame.origin.y = bounds.size.width * 4.0/5.0;   //
buttonsFrame.size.width = 240;                         //
buttonsFrame.size.height = 300;                        //
[settingsButton setFrame:buttonsFrame];

希望这会有所帮助!

答案 1 :(得分:1)

您可以使用zapko建议的if / else路径,也可以在项目设置中为每个设备设置主窗口。这至少可以让你在if / else块之外隔离设备的代码,根据我的经验,维护起来比较干净。

您是否也考虑过Retina显示屏?我认为当您在标准显示器和Retina显示器上进行测试时,同样的问题也会出现。由于您正在创建游戏,因此这可能不是一个选项,但通过IB向您的视图添加按钮将使应用程序能够跨屏幕扩展。

答案 2 :(得分:0)

你必须设计iphone以及ipad是最好的选择。另外你必须检查设备是iphone或ipad([UIDevice currentDevice] .model)然后你必须为两个设置框架

答案 3 :(得分:0)

if ([UIDevice currentDevice].model == iPhone) {
    [settingsButton setFrame:CGRectMake(38, 121, 30, 180)];
}
else {
    [settingsButton setFrame:CGRectMake(131, 145, 60, 250)];
}

创建一个你必须为iphone页面和ipad页面设计的通用应用程序。