iOS转换坐标从iPhone到iPad的兼容性

时间:2012-11-16 00:41:27

标签: iphone objective-c ios ipad cocos2d-iphone

当我第一次开始编程iOS(使用Cocos2d)时,我使用了一堆基于320x480屏幕尺寸的硬编码坐标。我刚刚意识到我需要至少包括一个基本版本的iPad和iPad mini。

我读过这些:

cocos2d(但我不确定这是不是最好的方法?) cocos2d:Convert iPhone App to Universal App

转换坐标: Convert coordinates from iPhone screen size to iPad screen size

将iphone转换为ipad: http://iphonedevelopment.blogspot.com/2010/04/converting-iphone-apps-to-universal.html

Apple关于创建通用应用的文档: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW24

  1. 有没有一种简单的方法可以将图形显示从iPhone转换为iPad,而无需编辑我使用硬编码值的代码的每一部分? (50个点,全部在1个档案中)
  2. 使用iOS / Cocos2D坐标进行未来编码的最佳做法是什么?我应该做什么

    #define SPACE_SHIP_X_IPAD 384

    #define SPACE_SHIP_X_IPHONE 160

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){

    `[ship.setPosition ccp:(SPACE_SHIP_X_IPHONE,0)];`
    

    } else {

    `[ship.setPosition ccp:(SPACE_SHIP_X_IPAD,0)];`
    

    }

    (顺便说一下,有人知道如何用“#”符号格式化这段代码,plz教我如何格式化上面的代码?)

  3. 建议我创建2个不同的应用程序 - 一个用于iphone,另一个用于iPad?或者只有1个app的通用方法,然后在我提交给Appstore时选择分发类型?

  4. Mac版本的应用程序与iPhone和iPad的应用程序商店的分销渠道相同吗?在Mac上发布的优点和缺点是什么? (我猜它不好,因为图形必须容纳大量的iMac?)
  5. 只是为了确保 - 我的应用程序文件(不使用任何特定于iphone的电话)可以在iPod和iPad Mini上运行而无需任何额外的工作,对吗?
  6. 非常感谢任何帮助。我会赞成所有好的尝试

2 个答案:

答案 0 :(得分:4)

看起来您的方法过于复杂。制作通用应用程序通常不涉及硬编码位置值,而是根据设备的边界计算这些位置值。

例如:

//Button in center for universal
CGPoint buttonOffset = CGPointMake( ([[UIScreen mainScreen] bounds].size.width - button.frame.size.width) / 2, ([[UIScreen mainScreen] bounds].size.height - button.frame.size.height) / 2);

button.frame = CGRectMake(buttonOffset.x, buttonOffset.y, button.frame.size.width, button.frame.size.height);

使用类似的概念创建位置相对于屏幕边界的按钮(或船只)。这将为您节省大量时间和悲伤。

需要注意的一点是屏幕的“边界”不会影响设备方向。如果您想支持多个方向,您会发现创建一个实用程序方法来为您处理该逻辑很有用。

类似的东西:

+ (CGSize) deviceSize {
    CGSize size;
    if(UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])){
        size = CGSizeMake([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width);
    } else {
        size = CGSizeMake([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height);        
    }
    return size;
}

我知道您需要一个简单的解决方案,因此您不必更改所有值,但我建议您咬住子弹并更改值。从长远来看,它会对你有很大帮助。不仅适用于此应用程序,而且该实践将有助于您将来创建的任何应用程序。

建议您为通用创建两个不同的应用程序吗?不,不建议这样做。您可以在创建xcode项目时选择“通用”,也可以在现有项目中更改它。您也不需要创建两个构建或二进制文件。 Apple会认为它是通用的,并且可以在商店中为所有设备提供。但是,您需要创建多个版本的闪屏以适应不同的屏幕尺寸和像素密度。

Mac应用程序的版本与iPhone和iPad的应用程序商店的分销渠道相同吗?排序...您可以部署到应用程序商店,因为您可以打包和获得更多自由自己分发OSX二进制文件 - 但是你必须创建一个单独的应用程序,因为你很可能会使用mac不支持的CocoaTouch库。您将希望保留不使用CocoaTouch的功能,例如渲染和游戏逻辑。如果要部署到OSX,大屏幕尺寸将是您最不关心的问题。优点:更广泛的受众。缺点:在构建应用程序/游戏时需要进行大量规划,以便尽可能多地重用代码并满足所有屏幕。

只是为了确保 - 我的应用程序文件(不使用任何特定于iphone的电话)将在iPod和iPad Mini上运行而无需任何额外的工作,对吧?嗯...... em>一些额外工作对于主屏幕图标和启动画面的一些额外图像资源,您将很高兴。

答案 1 :(得分:1)

我使用通过iCloud共享的数据文件执行此操作,以便数据显示在两个设备上的正确位置... X * = 768/320和Y * = 1024 / 480.要从iPad分辨率返回iPhone,只需分而不是乘。它简单而精确。然后,如果需要,记录您的数据配置的坐标集。