【问题标题】:How do I implement macros for IOS 7?如何为 IOS 7 实现宏?
【发布时间】:2014-12-07 15:05:14
【问题描述】:

我试图为所有 IOS 设备制作通用应用程序,除了 iPhone 4 以下,我有这个适用于 IOS 8 的宏:

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )

#define IS_IPHONE_6 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1334 ) < DBL_EPSILON )

这是我正在使用的代码:

-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
   SKSpriteNode *background;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

    if (IS_IPHONE_6) {
        background = [SKSpriteNode spriteNodeWithImageNamed:@"Background-667"];
    }
   else if (IS_IPHONE_5) {
        background = [SKSpriteNode spriteNodeWithImageNamed:@"Background-568"];
    }else{
        background = [SKSpriteNode spriteNodeWithImageNamed:@"Background"];
    }
    }else{
        background = [SKSpriteNode spriteNodeWithImageNamed:@"Background~iPad"];
    }
         background.anchorPoint = CGPointMake(0.5, 1);
    background.position = CGPointMake(self.size.width/2, self.size.height);
    [self addChild:background];

}
return self;
}

但这些宏不适用于 IOS 7 检测优化图像。 在这个论坛How to detect iPhone 5 (widescreen devices)? 他们说你需要把这个代码,它会工作

#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )
#define IS_WIDESCREEN      ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_WIDESCREEN_IOS8 : IS_WIDESCREEN_IOS7 )

但是当我这样做时,应用程序崩溃了。

我需要添加什么才能使其正常工作?我是初学者,不明白这个宏是如何工作的。

【问题讨论】:

  • nativeBounds 是在 iOS 8 中添加的,这就是它在 iOS 7 中崩溃的原因。
  • 您在项目中添加启动图像? .如果否,则将启动图像添加到您的项目中,然后运行..
  • @Milanpatel 启动图像与 iOS 7 下的崩溃有什么关系?

标签: ios iphone macros devise


【解决方案1】:

IS_WIDESCREEN 编写正确,因为它询问系统是否可以响应消息 -nativeBounds
对于IS_IPHONE_6 和 5,您应该编写类似于宽屏宏的内容,-nativeBounds 仅在 iOS8 中实现,这就是为什么在 iOS7 上启动应用程序时它会崩溃。
可能在 Xcode 中使用图片资源,您可以通过简单地创建一个为不同屏幕尺寸加载不同图片的图片资源来实现您想要的。

【讨论】:

  • #define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] Bounds ].size.height - ( double )568 )
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多