2017-02-21 13 views
0

私はこれまで同様の質問を見ましたが、明確な解決策は提供されていないようです。現在私はSKViewに含まれている子供とSKSceneを持っています。注:私はゲームプロジェクトを使用していません。代わりに、UIViewSKViewを使用しています。UIViewのサブビューとしてSKViewを追加するだけです。スプライト自体は小さな画像であり、フレーム全体の中底部の特定の部分のみを占有します。コードは次のようになります。SpriteKit:サイズ変更/スケーリング時のスプライトの不必要な伸び

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) 

ここで、問題はスプライトが元の形になっていないことです。それは縦軸に沿って伸びています。 .fill/.aspectFill/.aspectFit/.resizeFill/noneのいずれも、scaleModeを変更しようとしましたが、スプライトの元の形状/比率を与えるものはありません。また、imageViewのフレームの定数を変更しようとしましたが、スプライトのみがカットされます(imageView.frame.heightが減少した場合)。だから私はこの問題に対処する方法を知っているかもしれませんか?

+0

私は 'GameViewController''viewDidLoad'標準ゲームテンプレートにあなたのコードを入力しました。' .aspectFit'で伸びが見えません... –

答えて

0

あなたのコードは書かれているように問題なく動作します。私はそれを少し変更して、プレイグラウンドで試してみることができます。新しいプレイグラウンドを作成してコピー&ペーストするだけです。また、スプライトのイメージをドラッグする必要があります。

enter image description here

いいえストレッチ:

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) 

今すぐ画像が引き伸ばされます。あなたの含むビューとその上のすべてを見てください。

関連する問題