【问题标题】:Convert iPhone app to universal binary将 iPhone 应用程序转换为通用二进制文件
【发布时间】:2011-05-18 11:21:15
【问题描述】:

我有一个 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];

是的,显然,位置和大小应该是相对的,但我的问题是:如何使它们相对

非常感谢您的帮助!

【问题讨论】:

    标签: iphone objective-c ipad


    【解决方案1】:

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

    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];
    

    希望这会有所帮助!

    【讨论】:

    • @Zapko:谢谢,这看起来好像可行。但我想知道是否没有任何优雅的解决方案。苹果真的希望你做这一切吗?我没有“自动”或“相对”的东西吗?
    • @Matt:有一个 autoresizingMask 属性,它在处理界面旋转时非常有用,但在这种情况下,我不确定它是否会起作用。也许如果您制作自定义视图,使用固定框架和固定子视图坐标初始化它,为子视图分配正确的 autoresizingMask 值。然后在视图控制器的 loadView 方法中将其框架设置为适合 iPad 或 iPhone 的大小...
    • @zapko:去年它尝试了一个具有固定比例和自动调整大小掩码的按钮,但该属性被忽略了。该属性似乎仅在视图加载并发生更改后才重要。
    • @Zapko:谢谢!你真的帮了我。我想我会为按钮和 MystikSpiral 对 windows 的建议这样做。
    • @Zapko:实际上,如果我也想提供 Retina,我想必须有 3 个案例。我刚刚搜索了一下,发现this
    【解决方案2】:

    您可以使用 zapko 建议的 if/else 路线,也可以在项目设置中为每个设备设置主窗口。这至少允许您将设备的代码隔离在 if/else 块之外,并且根据我的经验,它更易于维护。

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

    【讨论】:

    • 我还没有考虑 Retina 显示屏,但我已经对其进行了测试,普通 iPhone 版本在 Retina 显示屏上运行良好。感谢您指出!
    【解决方案3】:

    你必须为 iphone 和 ipad 设计是最好的选择。否则你必须检查设备是 iphone 还是 ipad([UIDevice currentDevice].model) 然后你必须为两者设置框架

    【讨论】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-08-27
        • 2011-06-14
        • 2011-10-24
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多