2015-02-10 35 views
2

嗨,我是新來的精靈套件,並且由於某些原因,使用self.frame.size.width或.height將按鈕或子視圖定位在場景中時,它們未居中而是有時候完全脫離屏幕。有誰知道如何將框架大小設置爲iPhone/iPad的使用大小?將場景的框架設置爲iPhone屏幕的大小

這裏是我的代碼呈現子視圖時,當球員失去

func presentGameOverView() { 

    if firstTime == true { 
     let gameOverView = UIView() 
     gameOverView.frame = CGRectMake(self.frame.size.width/2.0, self.frame.size.height/2.0, 200, 200) //should be center of screen 
     gameOverView.backgroundColor = UIColor.redColor() 
     playGameOverSound() 
     self.view?.addSubview(gameOverView) 
     firstTime = false 
    } 
} 

這裏是gameViewController.swift

extension SKNode { 
class func unarchiveFromFile(file : NSString) -> SKNode? { 
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") { 
     var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)! 
     var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData) 

     archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") 
     let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene 
     archiver.finishDecoding() 
     return scene 
    } else { 
     return nil 
    } 
} 

}

類GameViewController的一部分:UIViewController中{

override func viewDidLoad() { 
    super.viewDidLoad() 


    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 
     // Configure the view. 
     let skView = self.view as SKView 
     skView.showsFPS = true 
     skView.showsNodeCount = true 

     /* Sprite Kit applies additional optimizations to improve rendering performance */ 
     skView.ignoresSiblingOrder = true 

     /* Set the scale mode to scale to fit the window */ 
     scene.scaleMode = .AspectFill 


     //display banner Ads 
     //self.canDisplayBannerAds = true 

     skView.presentScene(scene) 
    } 
} 

回答

2

如果widthheightUIView的尺寸然後原點,對於圖是在中心處,將在點

origin = (self.frame.size.width/2 - width/2, self.frame.size.height/2 - height/2) 

所以gameOverView幀應該是

let width : CGFloat = 200.0 
let height : CGFloat = 200.0 
gameOverView.frame = CGRectMake(self.frame.size.width/2 - width/2 
    , self.frame.size.height/2 - height/2, width, height) 

要不使用sks文件,在GameViewControllerviewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    let scene = GameScene(size:CGSizeMake(self.view.frame.width, self.view.frame.height)) 

    let skView = self.view as SKView 
    skView.showsFPS = true 
    skView.showsNodeCount = true 

    skView.ignoresSiblingOrder = true 

    scene.scaleMode = .AspectFill 


    skView.presentScene(scene) 
} 

你也可以提取基礎SKView,而不是sceneframe的框架,併爲此

if let viewFrame = self.view?.frame { 
    let width : CGFloat = 200.0 
    let height : CGFloat = 200.0 
    gameOverView.frame = CGRectMake(viewFrame.size.width/2 - width/2 
     , viewFrame.size.height/2 - height/2, width, height) 
} 
+1

是啊,但由於某種原因未在gamescene出現。我不知道爲什麼,但框架是比屏幕尺寸大得多從未有過這種情況發生之前,當我println(self.frame.size.width) println(self.frame.size.height) 我得到1024和768 – 2015-02-10 00:34:22

+0

你使用的是sks文件嗎? – rakeshbs 2015-02-10 00:34:59

+0

當我創建一個精靈場景GameScene.sks是在項目文件夾...但我所有的代碼是在GameScene.swift – 2015-02-10 00:37:58