我以前见过类似的问题,但似乎没有提供明确的解决方案。目前,我有SKScene
有孩子,由SKView
包含。注意:我没有使用游戏项目;相反,我在普通SKView
中使用UIView
,只需添加SKView
作为UIView
的子视图。精灵本身是一个小图像,它只占据整个帧中下部的某个部分。代码看起来像这样:
let imageView = SKView()
imageView.frame = CGRect(x: ..., y: ..., width: ..., height: ...) //all are predefined constants
let sprite = SKSpriteNode(texture: SKTexture(imageNamed: "image"))
sprite.position = CGPoint(x: imageView.frame.width * 0.5, y: imageView.frame.height * 0.5) // so it's positioned in the center
let scene = SKScene(size: imageView.frame.size) // also tried with sprite.size, but not working
scene.addChild(sprite)
scene.scaleMode = .aspectFit
imageView.presentScene(scene)
self.frame.addSubview(imageView)
现在问题是精灵不是原来的形状;它沿垂直轴伸展。我尝试使用所有5个选项更改scaleMode
:.fill
/ .aspectFill
/ .aspectFit
/ .resizeFill
/ none
,但没有一个给出精灵原始形状/比例。我也尝试更改imageView
框架的常量,但这只会削减精灵(如果imageView.frame.height
减少了)。我可以知道如何解决这个问题吗?
答案 0 :(得分:1)
您的代码可以正常编写,因此问题可能在其他地方。我对它进行了一些修改,以便您可以在Playground中进行测试。只需制作一个新的游乐场并复制粘贴即可。您还必须为您的精灵拖动图像。
import SpriteKit
import PlaygroundSupport
// create the outer UIView and show it on the playground
let outerView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
PlaygroundPage.current.liveView = outerView
// create the SKView and add it to the outer view
let imageView = SKView(frame: CGRect(x: 25, y: 25, width: 250, height: 250))
outerView.addSubview(imageView)
// create the scene and present it
var scene = SKScene(size: imageView.frame.size)
imageView.presentScene(scene)
// create the sprite, position it, add it to the scene
let sprite = SKSpriteNode(texture: SKTexture(imageNamed: "worf.jpg"))
sprite.position = CGPoint(x: imageView.frame.width * 0.5, y: imageView.frame.height * 0.5)
scene.scaleMode = .aspectFit
scene.addChild(sprite)
结果如下:
没有伸展!因此,您的问题可能与您将其放入的UIView有关。例如,如果您添加:
outerView.transform = CGAffineTransform(scaleX: 1, y: 2)
现在,图像会按照您的描述进行拉伸。看看你的包含视图及其上面的所有内容。