我在尝试使我的 SpriteKit 游戏在所有设备上兼容时遇到了一些问题。我了解 Image.xcassets 的工作原理,以及如何在放置节点时引用电话框架。
例如,我的游戏在 6、6+ 和 iPad 上看起来不错。不幸的是,对于早期的 iPhone,它的顶部被切断了。一个简单的解决方法就是像这样引用屏幕顶部:
node.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame) - 5)
这适用于所有手机,但不适用于 iPad
但是,如果我像那样引用设备的顶部,那么在 iPad 上,上部节点离屏幕太远,以至于英雄无法与它们互动。
目前我编写用于定位节点的代码的方式只是使用其他节点在其之上构建:
node.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame) + node2.size.height + node3.size.height)
这适用于 6、6+ 和 iPad
我怎样才能让它在所有设备上都兼容?我知道我可以调整“2x”图像,使其适合 5 和 5s,但随后它会抛弃 6 的游戏机制(因为 6 和 5 系列出于某种原因共享“2x”)。
有没有一种方法可以专门测试在特定设备上的使用情况,然后在这种情况下运行特定代码?有什么解决办法吗?谢谢。
最佳答案
在 Swift 中使用三元运算符更容易:
这会检查高度大于 iphone 6+ 的尺寸,这意味着它是 iPad,然后相应地设置自定义尺寸的图像,您甚至可以使用他在上面发布的 Lucas 宏:
asdf!.qrImageView.image = UIScreen.mainScreen().bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
这是完整的代码,现在试试这个,显然可以根据您的需要更改图像,上面的调用使用了非常自定义的 UIView 子类,下一个调用不是,它使用的是 UIImageView:
override func viewDidLoad() {
super.viewDidLoad()
var floatiesW = 200 as CGFloat
var floatiesH = 200 as CGFloat
var asdf = UIImageView()
asdf.backgroundColor = UIColor.redColor()
asdf.frame = CGRectMake((self.view.bounds.width/2.0) - (floatiesW/2.0), (self.view.bounds.height/2.0) - (floatiesH/2.0), floatiesW, floatiesH)
asdf.image = self.view.bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
self.view.addSubview(asdf)
}
还有这个:
UIScreen.mainScreen().bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
在大多数情况下可以与此交换:
self.view.bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
但要小心,您可能应该使用 UIScreen.main .. 一个
关于ios - 针对特定设备的缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260959/