如何正确调整 SKView 子视图和 SKScene 的大小
Posted
技术标签:
【中文标题】如何正确调整 SKView 子视图和 SKScene 的大小【英文标题】:How to size SKView sub view and SKScene correctly 【发布时间】:2016-08-02 10:00:00 【问题描述】:我正在尝试获取/设置子视图的正确大小 (SKView
)。
我正在使用情节提要创建一个UIView
,以及一个SKView
的子视图。我想以编程方式创建一个具有SKView
尺寸的SKScene
。
我的想法是scene.size.height
和scene.size.width
将等于SKView 的高度和宽度。为了测试这一点,我在每个角落画了四个蓝色圆圈,在边框上画了红线。当我期望看到所有四个蓝色角点和边界线时,我只能看到左下角。
请忽略场景中的黑色圆圈,它们无关紧要。
iPhone 6 屏幕截图(纵向)
iPhone 6 屏幕截图(横向)
我添加了 SW(西南)、SE、NE 和 NW 标签
带有 SKView 参考的 ViewController
这是我创建SKSCene
的地方(参见func newGame
)
import UIKit
import SpriteKit
class CenterView: UIViewController, ActionDelegate
@IBOutlet weak private var navBar:UINavigationBar!
@IBOutlet weak private var titleBar:UINavigationItem!
@IBOutlet weak private var gameView:SKView!
var navigation:NavigationDelegate?
var action:ActionDelegate?
var game:GameDelegate?
override func viewDidLoad()
super.viewDidLoad()
self.action = self
newGame()
@IBAction func menuClick(sender: AnyObject)
navigation?.toggleLeftPanel()
func setTitleBarTitle(title: String)
titleBar.title = title
func newGame()
print("skview bounds: \(self.gameView.bounds.size)")
let game = GameScene(size: self.gameView.bounds.size)
self.game = game
game.action = action
game.scaleMode = .ResizeFill
self.gameView.presentScene(game)
Main.storyboard
约束
添加圆角和边框线
if let scene = self.scene
let dot = SKShapeNode(circleOfRadius: 10)
dot.fillColor = UIColor.blueColor()
dot.position = CGPoint(x: 0,y: 0)
let dot1 = SKShapeNode(circleOfRadius: 10)
dot1.fillColor = UIColor.blueColor()
dot1.position = CGPoint(x: scene.size.width,y: 0)
let dot2 = SKShapeNode(circleOfRadius: 10)
dot2.fillColor = UIColor.blueColor()
dot2.position = CGPoint(x: 0,y: scene.size.height)
let dot3 = SKShapeNode(circleOfRadius: 10)
dot3.fillColor = UIColor.blueColor()
dot3.position = CGPoint(x: scene.size.width,y: scene.size.height)
let left = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 3, height: scene.size.height))
let top = SKShapeNode(rect: CGRect(x: 0, y: scene.size.height, width: scene.size.width, height: 3))
let right = SKShapeNode(rect: CGRect(x: scene.size.width, y: 0, width: 3, height: scene.size.height))
let bottom = SKShapeNode(rect: CGRect(x: 0, y: 0, width: scene.size.width, height: 3))
left.fillColor = UIColor.redColor()
top.fillColor = UIColor.redColor()
bottom.fillColor = UIColor.redColor()
right.fillColor = UIColor.redColor()
scene.addChild(dot)
scene.addChild(dot1)
scene.addChild(dot2)
scene.addChild(dot3)
scene.addChild(left)
scene.addChild(top)
scene.addChild(right)
scene.addChild(bottom)
【问题讨论】:
【参考方案1】:原来我的约束设置不正确。
约束
结果
【讨论】:
以上是关于如何正确调整 SKView 子视图和 SKScene 的大小的主要内容,如果未能解决你的问题,请参考以下文章
SKView集成到UIViewController中,UITextFields滞后