2015-09-24 44 views
2

我有兩個問題,我懷疑是相互關聯的。應用程序沒有填滿設備屏幕,也沒有啓動屏幕自動旋轉

我有一個支持兩種風景方向的通用應用程序。我的應用程序啓動(使用界面生成器啓動屏幕),然後顯示SKScene。我有三大問題。

  1. 在iPad上,並且僅在iPad(iOS 8或9)上加載應用程序時,所有圖像都從中丟失,只剩下文本。此外,啓動屏幕的顯示面積比實際設備顯示器小約1釐米。這在iPhone上不是問題
  2. 在iPad上,並且僅在iPad(iOS 8或9)上出於某種原因,整個應用都會在其周圍出現邊框。我的應用佔用的屏幕區域比實際設備小。這在iPhone上不是問題。
  3. 我的應用程序被設置爲在「shouldAutoRotate()」函數內自動旋轉。不過,我無法啓動屏幕以正確的方向啓動。

我想你可能會有興趣看以下幾點:

摘錄的viewController:

import UIKit 
import SpriteKit 
import AVFoundation 
import GameKit 
import CoreData 
import iAd 

extension SKNode { 
    class func unarchiveFromFile(file : String) -> 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 
     } 
    } 
} 

class GameViewController: UIViewController, SceneTransitionDelegate, GKGameCenterControllerDelegate, ADBannerViewDelegate { 


    var audioPlayers:[AVAudioPlayer] = [] 
    var sounds:[NSURL] = [] 
    var nextSongDelay:NSTimer = NSTimer() 
    var currentSong:AVAudioPlayer = AVAudioPlayer() 
    var disp:CGFloat = 0 
    var starget:String = "HI" 
    var soundEffects:[AVAudioPlayer] = [] 

    var rwidth:CGFloat = 0 
    var rheight:CGFloat = 0 
    var skView:SKView { return view as! SKView } 
    //var skView:SKView { return view as! SKView } 
    var iadp:Bool = false 

    var ar:Bool = true 
    var uord:Bool = false 



    override func viewDidLoad() { 
     super.viewDidLoad() 

     theEssence = self 
     launchAudio() 
     //mediumRectAdView!.delegate = self; 

     let defaults = NSUserDefaults.standardUserDefaults() 

     if (isAppAlreadyLaunchedOnce() == false) 
     { 
      defaults.setBool(false, forKey: "player") 
     } 


     if (defaults.boolForKey("Toothachepunlockiad") == true) 
     { 
      s_manualoverride.self = true 
      iAdBanner.hidden = true 
     } 

     // Configure the view. 
     let skView = self.view as! SKView 
     //skView.showsFPS = true 
     //skView.showsNodeCount = true 
     skView.showsPhysics = false 
     delli = self 
     authenticateLocalPlayer() 

     iAdBanner.frame = CGRectMake(0, self.view.frame.size.height, self.view.frame.width, 50) 
     iAdBanner.delegate = self 
     bannerVisible = false 
     iAdBanner.hidden = false 

     ar = true 
     self.shouldAutorotate() 

     transitionToScene(Menu.self) 


    } 
    //SceneTransitionDelegate method 
    func transitionToScene(sceneClass:Scene.Type) { 
     playing = false 
     var sizeRect = UIScreen.mainScreen().applicationFrame 
     var width = sizeRect.size.width 
     var height = sizeRect.size.height 
     let skView = self.view as! SKView 
     let scene = sceneClass(size: skView.bounds.size) 
     scene.size = CGSizeMake(width, height) 
     rwidth = width 
     rheight = height 
     swidth = width 
     sheight = height 
     skView.ignoresSiblingOrder = true 

     scene.scaleMode = .AspectFill 
     scene.sceneDelegate = self 

     skView.presentScene(scene) 


    } 

    func transitionToScene(sceneClass: Scene.Type, transitionAnimation: SKTransition) 
    { 
     playing = false 
     var sizeRect = UIScreen.mainScreen().applicationFrame 
     var width = sizeRect.size.width 
     var height = sizeRect.size.height 
     let skView = self.view as! SKView 
     let scene = sceneClass(size: skView.bounds.size) 

     scene.size = CGSizeMake(width, height) 
     rwidth = width 
     rheight = height 
     swidth = width 
     sheight = height 
     skView.ignoresSiblingOrder = true 

     scene.scaleMode = .AspectFill 
     scene.sceneDelegate = self 
     skView.presentScene(scene, transition: transitionAnimation) 
    } 


    override func shouldAutorotate() -> Bool { 
     return ar 
    } 

    override func supportedInterfaceOrientations() -> Int { 
     if UIDevice.currentDevice().userInterfaceIdiom == .Phone { 
      return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue) 
     } else { 
      return Int(UIInterfaceOrientationMask.All.rawValue) 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     if (playing == true) 
     { 
      println("MEMORY WARNING WE ARE DIEING") 
      //fatalError("MEMORY WARNING WE AARE ALL GOING TO DIE") 
     } 
     // Release any cached data, images, etc that aren't in use. 
    } 

    override func prefersStatusBarHidden() -> Bool { 
     return true 
    } 

    func bannerViewDidLoadAd(banner: ADBannerView!) { 
     if(bannerVisible == false) { 

      // Add banner Ad to the view 
      if(iAdBanner.superview == nil) { 
       self.view.addSubview(iAdBanner) 
      } 

      // Move banner into visible screen frame: 
      UIView.beginAnimations("iAdBannerShow", context: nil) 
      banner.frame = CGRectOffset(banner.frame, 0, -banner.frame.size.height) 
      UIView.commitAnimations() 

      bannerVisible = true 
     } 

    } 

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { 
     if(bannerVisible == true) { 
      // Move banner below screen frame: 
      UIView.beginAnimations("iAdBannerHide", context: nil) 
      banner.frame = CGRectOffset(banner.frame, 0, banner.frame.size.height) 
      UIView.commitAnimations() 
      bannerVisible = false 
     } 

    } 

    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool { 
     // Configure the view. 
     let skView = self.view as! SKView 
     skView.paused = true 

     return true 
    } 

    func bannerViewActionDidFinish(banner: ADBannerView!) { 
     let skView = self.view as! SKView 
     skView.paused = false 
    } 
} 

有些事情,我最近做可能會引發這樣的: 加入的織物崩潰報告 新增了自動旋轉功能

Picture of it

+0

你可以查看是否在項目或目標的設置,莫名其妙僅針對iPhone設定? –

回答

0

我在iPhone 6 Plus上遇到了類似的問題。原因是缺少加載該設備顯示大小的圖像。檢查是否加載了所有需要的尺寸和方向的圖像。正如你在圖片中看到的那樣,Xcode告訴你特定圖像的大小應該是多少。希望這能解決你的問題。

enter image description here

+0

不幸的是,我正在使用界面生成器文件而不是啓動圖像。 –

+0

@ J.Doe我似乎記得我的一個應用程序中有類似的問題。如果您的部署目標小於「啓動屏幕支持」版本,則可能需要添加啓動映像。發射圖像文件也可能只是必須存在。 (我現在無法檢查,因爲我必須檢查該項目的git歷史記錄,現在我沒有足夠的時間,但我相信我添加了虛擬啓動映像來修復它。) –

相關問題